Table of Contents

Σύστημα Υπηρεσιών στο Linux

Εισαγωγή

:en:illbeyourserver.jpg

Για να ξεκινήσεις/σταματήσεις/επανεκκινήσεις/φορτώσεις μια υπηρεσία οποτεδήποτε στο Debian

/etc/init.d/<name of service> start/stop/restart/reload

π.χ. Για να επανεκκινήσεις την υπηρεσία εκτύπωσης

/etc/init.d/cups restart

Διαδικασία εκκίνησης στο Linux

Όταν το σύστημα εκκινείται, η διαδικασία init διαβάζει το αρχείο ρυθμίσεων /etc/inittab. Ανά πάσα στιγμή μπορούμε να την αναγκάσουμε να το ξαναδιαβάσει εάν της δόσουμε το HUP σήμα από το ksysguard ή από την κονσόλα ως root

kill -l HUP 1 

Έτσι μας δίνεται η δυνατότητα να κάνουμε αλλαγές στην διαδικασία εκκίνησης και να τις δούμε χωρίς να επανεκκινήσουμε το σύστημα.

Οι υπηρεσίες που μπορούν να εκτελεστούν κατά την εκκίνηση βρίσκονται στο φάκελο /etc/init.d/

Στο Linux υπάρχουν επίπεδα εκκίνησης. Όταν η διαδικασία εκκίνησης βρίσκεται στο επίπεδο X όλοι οι σύνδεσμοι σε υπηρεσίες που βρίσκονται στον φάκελο /etc/rcX.d/ θα εκτελεστούν με αλφαβητική σειρά. 7 είναι τα συνήθη επίπεδα, δες /etc/inittab για λεπτομέρειες. Για να αλλάξεις επίπεδο ανά πάσα στιγμή τρέξε την telinit

telinit 1

θα πάει το σύστημα στο επίπεδο 1

Όλοι οι σύνδεσμοι που το όνομά τους ξεκινά με Syyname εκκινούν μια υπηρεσία. Το yy εισάγεται για να οριστεί η σειρά εκκίνησης των υπηρεσιών και το name είναι το πραγματικό όνομα της υπηρεσίας που υπάρχει στο φάκελο /etc/init.d/

Όλοι οι συνδέσμοι που ξεκινούν με Kyyname σταματάνε μια υπηρεσία.

Πάντα να χρησιμοποιείται το sysvconfig ή το ksysv για να δημιουργούνται τέτοιοι συνδέσμοι έτσι ώστε να διατηρείται η αυτοματοποίηση στην διανομή Linux.

Δείτε επίσης το αρχείο /etc/init.d/README για λεπτομέρειες.

Δημιουργία Νέας Προσωπικής Υπηρεσίας

Για να δημιουργήσετε μία νέα προσωπική υπηρεσία υπάρχει ένα αρχείο υπόδειγμα /etc/init.d/skeleton Έστω ότι θέλετε να δημιουργήσετε μια υπηρεσία που ενεργοποιεί δρομολόγηση (βλέπε Διαμοιρασμός Σύνδεσης Internet) και που έχει εκτελέσιμο το /usr/bin/myrouter. Θέλουμε να ονομάσουμε την υπηρεσία myrouter επίσης άρα αντιγράφουμε αρχικά το αρχείο /etc/init.d/skeleton στο /etc/init.d/myrouter

cp /etc/init.d/skeleton /etc/init.d/myrouter

Το αρχείο αυτό περιέχει σχόλια που βοηθάνε στην κατανόηση της λειτουργίας του. Στο παράδειγμά μας θα αλλάξουμε τις εξής γραμμές:

Για την περιγραφή της υπηρεσίας

DESC="IP forwarding and internet routing"

Το όνομα της υπηρεσίας και του αρχείου στο /etc/init.d

NAME=myrouter

Οι ενέργειες που θα γίνουν κατά την εκκίνησή της με την εντολή /etc/init.d/myrouter start

do_start()
{
  /usr/bin/myrouter

Οι ενέργειες που θα γίνουν κατά τον τερματισμό της με την εντολή /etc/init.d/myrouter stop Στην περίπτωσή μας αρκεί να απενεργοποιήσουμε την προώθηση ip

do_stop()
{
   /bin/echo 0 > /proc/sys/net/ipv4/ip_forward

Δεν πρέπει να ξεχάσουμε να κάνουμε εκτελέσιμο το script

chmod a+x /etc/init.d/myrouter

Αυτό ήταν!! Τώρα με το ksysv ή το sysvconfig μπορούμε να ενεργοποιήσουμε ή να απενεργοποιήσουμε την χρήση της υπηρεσίας μας κατά την εκκίνηση!

Σειρά Εκκίνησης (παρωχημένος τρόπος)

Ο παλιός παρωχημένος τρόπος ορισμού της σειράς εκκίνησης δημιουργούσε συμβολικούς δεσμούς στους φακέλους /etc/rc*.d/ ως Sxxmydaemon και Kxxmydaemon (S για εκκίνηση και K για τετρματισμό και xx ένας αριθμός που βοηθούσε την ταξινόμηση σε σειρά).

Εάν θέλουμε να ορίσουμε πιο άμεσα την σειρά εκκίνησης π.χ. να εκκινεί μετά από όλα και να τερματίζει πριν από όλα (βεβαίως παίζει ρόλο και η αλφαβητική σειρά), μπορούμε να εκτελέσουμε

update-rc.d myrouter start 99 2 3 4 5 . stop 01 0 1 6 .

Για τις προκαθορισμένες ενάρξεις (S20 ..)

update-rc.d myrouter default

Για να μην εκτελείται η υπηρεσία κατά την εκκίνηση

update-rc.d myrouter disable

Για να αφαιρεθούν όλοι οι συμβολικοί δεσμοί, που όμως θα ξανατοποθετηθούν σε πιθανό upgrade του πακέτου

update-rc.d myrouter remove

Σειρά Εκκίνησης - Εξαρτώμενη

Πλέον η σειρά εκκίνησης βασίζεται σε εξαρτήσεις μεταξύ των υπηρεσιών, οι οποίες ορίζονται στο κάθε αρχείο /etc/init.d/mydaemon. (Βλ.http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot)

Για την μεταφορά από τον παλιό στον νέο τρόπο εκκίνησης εκτελούμε

dpkg-reconfigure sysv-rc

Για προσθήκη υπηρεσίας

insserv mydaemon

Για αφαίρεση υπηρεσίας

insserv -r mydaemon

Εφαρμογές επεξεργασίας εκκίνησης υπηρεσιών

ksysv - γραφικός επεξεργαστής εκκίνησης υπηρεσιών

Ένας πολύ χρήσιμος επεξεργαστής εκκίνησης υπηρεσιών είναι ο ksysv. Χρησιμοποιεί επίσης τον kwrite για να αλλάξει τα αρχεία ρυθμίσεων των υπηρεσιών. Σύρε υπηρεσίες στα διάφορα επίπεδα εκκίνησης με την σειρά που θέλεις.

sysvconfig - επεξεργαστής εκκίνησης υπηρεσιών από κονσόλα

Ο βασικός επεξεργαστής εκκίνησης υπηρεσιών που τρέχει σε κονσόλα είναι ο sysvconfig. Ενεργοποίηση/Απενεργοποίηση υπηρεσιών θα δημιουργήσει/διαγράψει όλους τους αντίστοιχους συνδέσμους στα επίπεδα εκκίνησης

Παρόλ' αυτά κάποιες υπηρεσίες μπορεί να εμφανίζονται ενεργοποιημένες αλλά να μην έχουν συνδέσμους στα επίπεδα εκκίνησης. Γι' αυτό μπορείτε να απενεργοποιήσετε μια υπηρεσία και να την ενεργοποιήσετε πάλι για σιγουριά. Επίσης τσεκάρετε από το ksysv εάν ενεργοποιήθηκε. Καλό είναι πάντα να ελέγχετε με το ksysv καθώς η σειρά εκκίνησης μπορεί να μην είναι αυτή που θα θέλατε.

Systemd

Μια σειρά από εντολές για το νέο σύστημα εκκίνησης systemd : http://xmodulo.com/use-systemd-system-administration-debian.html Για να δούμε τι καθυστερεί την διαδικασία εκκίνησης

systemd-analyze plot > boot.svg

Για να δούμε τις υπηρεσίες που απέτυχαν να ξεκινήσουν

systemctl --failed

Αντιμετώπιση Προβλημάτων

Μερικές φορές η διαδικασία εκκίνησης σταματάει σε μία διεργασία.

Καταγράφουμε την διεργασία ώστε να διορθώσουμε το πρόβλημα στην συνέχεια και κάνουμε τα εξής για να προχωρήσει η εκκίνηση

Πηγές