====== Σύστημα Υπηρεσιών στο Linux ====== ===== Εισαγωγή ===== {{:en:illbeyourserver.jpg|:en:illbeyourserver.jpg}} Για να ξεκινήσεις/σταματήσεις/επανεκκινήσεις/φορτώσεις μια υπηρεσία οποτεδήποτε στο Debian /etc/init.d/ 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 * 0 για τερματισμό συστήματος * 6 για επανεκκίνηση συστήματος * 1 για περιβάλλον μοναδικού χρήστη (μόνο ένα κέλυφος root,κανένας άλλος δεν μπορεί να συνδεθεί) * 2 πολλαπλών χρηστών χωρίς δικτυακό σύστημα αρχείων nfs * 3 πολλαπλών χρηστών - περιβάλλον κονσόλας * 4 χωρίς χρήση * 5 πολλαπλών χρηστών - γραφικό περιβάλλον Όλοι οι σύνδεσμοι που το όνομά τους ξεκινά με Syyname εκκινούν μια υπηρεσία. Το yy εισάγεται για να οριστεί η σειρά εκκίνησης των υπηρεσιών και το name είναι το πραγματικό όνομα της υπηρεσίας που υπάρχει στο φάκελο /etc/init.d/ Όλοι οι συνδέσμοι που ξεκινούν με Kyyname σταματάνε μια υπηρεσία. Πάντα να χρησιμοποιείται το sysvconfig ή το ksysv για να δημιουργούνται τέτοιοι συνδέσμοι έτσι ώστε να διατηρείται η αυτοματοποίηση στην διανομή Linux. Δείτε επίσης το αρχείο /etc/init.d/README για λεπτομέρειες. ===== Δημιουργία Νέας Προσωπικής Υπηρεσίας ===== Για να δημιουργήσετε μία νέα προσωπική υπηρεσία υπάρχει ένα αρχείο υπόδειγμα /etc/init.d/skeleton Έστω ότι θέλετε να δημιουργήσετε μια υπηρεσία που ενεργοποιεί δρομολόγηση (βλέπε [[#es_ses_internet | Διαμοιρασμός Σύνδεσης 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 ===== Αντιμετώπιση Προβλημάτων ===== Μερικές φορές η διαδικασία εκκίνησης σταματάει σε μία διεργασία. Καταγράφουμε την διεργασία ώστε να διορθώσουμε το πρόβλημα στην συνέχεια και κάνουμε τα εξής για να προχωρήσει η εκκίνηση * **CTRL-C** (για να διακοπεί η διαδικασία που έχει κολλήσει ή αν επιμένει) * **CTRL-]** (για υπηρεσίες όπως quota) ===== Πηγές ===== * systemd * sysvinit to systemd cheatsheet : https://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet * https://www.tecmint.com/manage-services-using-systemd-and-systemctl-in-linux/ * http://xmodulo.com/use-systemd-system-administration-debian.html * http://dynacont.net/documentation/linux/Useful_SystemD_commands/ * https://wiki.archlinux.org/index.php/systemd * http://unix.stackexchange.com/questions/233468/how-does-systemd-use-etc-init-d-scripts * Dependency boot : http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot * boot script examples : http://www.debian-administration.org/articles/28 * http://www.debianadmin.com/debian-and-ubuntu-linux-run-levels.html * disable services : http://positon.org/disable-a-service-with-update-rcd-under-debian-update-resistant