Μετάβαση στο περιεχόμενο

Ρυθμίσεις cookies

Επιλέξτε ανά κατηγορία ποια cookies επιτρέπετε. Μπορείτε να αλλάξετε την επιλογή σας οποιαδήποτε στιγμή μέσω των Ρυθμίσεων cookies στο κάτω μέρος κάθε σελίδας. Δήλωση απορρήτου

Απαραίτητα

Πάντα ενεργά

Χρειάζονται για τη σύνδεση, για να διατηρείται το καλάθι σας και για να θυμόμαστε τις επιλογές σας. Είναι πάντα ενεργά.

Ποια cookies;
  • weboke_sessie, weboke_klant, weboke_remember: η συνεδρία σας και η παραμονή σε σύνδεση
  • weboke_basket: το καλάθι σας
  • wkBtwIncl: εμφάνιση τιμών με ή χωρίς ΦΠΑ
  • wok_cookies: η επιλογή σας για τα cookies, 12 μήνες

Μετρούν ποια διαφήμιση οδηγεί σε επίσκεψη ή παραγγελία, ώστε να μην πληρώνουμε για διαφημίσεις που δεν αποδίδουν.

Ποια cookies;
  • Google Ads μέσω Google Tag Manager (_gcl_au, _gcl_aw), έως 90 ημέρες
  • OpenAI Ads, διαφημίσεις στο ChatGPT
  • wok_aff: μέσω ποιου συνεργάτη ήρθατε σε εμάς (πρόγραμμα συνεργατών), 60 ημέρες

4,6

Χώρα και γλώσσα

Κάθε χώρα έχει τη δική της ιστοσελίδα, με τιμές και ΦΠΑ της χώρας αυτής.

Προβολή

Διαχείριση υπηρεσιών με το systemd

Ενότητα 6: Υπηρεσίες και αρχεία καταγραφής · Χρόνος ανάγνωσης: 10 λεπτά

Στόχος μαθήματος: Μετά από αυτό το μάθημα μπορείτε να ξεκινάτε, να σταματάτε και να επαναφορτώνετε υπηρεσίες και να τις ρυθμίζετε ώστε να ξεκινούν κατά την εκκίνηση του συστήματος. Μπορείτε επίσης να διαβάζετε την κατάσταση μιας υπηρεσίας και να αλλάζετε με ασφάλεια μια ρύθμισή της με ένα drop-in.

Βασικές έννοιες: systemd, unit, service, systemctl, start, stop, restart, reload, enable, disable, --now, active, inactive, failed, systemctl --failed, drop-in, systemctl edit, daemon-reload, Restart=

Ποιος κρατά τα πάντα σε λειτουργία;

Σε έναν server εκτελούνται δεκάδες προγράμματα που πρέπει να είναι πάντα διαθέσιμα: ο SSH server, ο web server, μια βάση δεδομένων, ο συγχρονισμός της ώρας. Αυτά τα προγράμματα ονομάζονται υπηρεσίες (services ή daemons). Κάποιος πρέπει να τα ξεκινά κατά την εκκίνηση, να τα παρακολουθεί και να τα επανεκκινεί όταν καταρρεύσουν. Στα Debian, Ubuntu, AlmaLinux και Rocky Linux αυτό το κάνει το systemd. Είναι το πρώτο πρόγραμμα που ξεκινά ο kernel (διεργασία 1) και στη συνέχεια ξεκινά όλα τα υπόλοιπα.

Το systemd δουλεύει με units: περιγραφές για κάτι που πρέπει να διαχειρίζεται. Οι σημαντικότεροι τύποι:

ΤύποςΕπέκτασηΠαράδειγμα
Υπηρεσία.servicenginx.service, ssh.service
Timer (προγραμματισμένη εργασία).timerapt-daily.timer (μάθημα 4.2, μάθημα 6.3)
Socket.socketssh.socket στο Ubuntu 24.04 και νεότερες εκδόσεις
Στόχος (ομάδα units).targetmulti-user.target

Επικοινωνείτε με το systemd μέσω της εντολής systemctl. Την επέκταση .service μπορείτε να την παραλείψετε: το systemctl status nginx είναι το ίδιο με το systemctl status nginx.service.

Ανάγνωση της κατάστασης

Η εντολή που θα χρησιμοποιείτε συχνότερα:

anna@web1:~$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Mon 2026-11-09 08:12:44 CET; 3h 2min ago
       Docs: man:nginx(8)
    Process: 902 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 905 (nginx)
      Tasks: 3 (limit: 2275)
     Memory: 4.1M (peak: 6.3M)
        CPU: 213ms
     CGroup: /system.slice/nginx.service
             ├─905 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             └─906 "nginx: worker process"

nov 09 08:12:44 web1 systemd[1]: Starting nginx.service - A high performance web server...
nov 09 08:12:44 web1 systemd[1]: Started nginx.service - A high performance web server...

Διαβάστε την από πάνω προς τα κάτω:

  • Η κουκκίδα πριν από το όνομα είναι πράσινη όταν η υπηρεσία εκτελείται, λευκή όταν έχει σταματήσει και κόκκινη όταν έχει αποτύχει.
  • Το Loaded δείχνει πού βρίσκεται το αρχείο unit και αν η υπηρεσία ξεκινά κατά την εκκίνηση (enabled) ή όχι (disabled).
  • Το Active δείχνει αν εκτελείται τώρα (active (running)), αν έχει σταματήσει (inactive (dead)) ή αν έχει αποτύχει (failed), καθώς και από πότε.
  • Τα Main PID και CGroup δείχνουν ποιες διεργασίες ανήκουν στην υπηρεσία.
  • Στο κάτω μέρος εμφανίζονται οι τελευταίες γραμμές από το αρχείο καταγραφής της υπηρεσίας. Συχνά εκεί φαίνεται ήδη γιατί κάτι δεν πάει καλά. Περισσότερα διαβάζετε με το journalctl (μάθημα 6.2).

Εκκίνηση, διακοπή, επανεκκίνηση και επαναφόρτωση

anna@web1:~$ sudo systemctl start nginx      # εκκίνηση τώρα
anna@web1:~$ sudo systemctl stop nginx       # διακοπή τώρα
anna@web1:~$ sudo systemctl restart nginx    # διακοπή και επανεκκίνηση
anna@web1:~$ sudo systemctl reload nginx     # επαναφόρτωση ρυθμίσεων χωρίς διακοπή

Η διαφορά ανάμεσα σε restart και reload είναι σημαντική στην πράξη. Με ένα restart η υπηρεσία σταματά για λίγο: οι ενεργές συνδέσεις διακόπτονται, και αν η νέα ρύθμιση περιέχει σφάλμα, η υπηρεσία δεν ξεκινά ξανά και ο ιστότοπός σας πέφτει. Με ένα reload η υπηρεσία διαβάζει ξανά τη ρύθμισή της ενώ συνεχίζει να εκτελείται. Αν η ρύθμιση έχει σφάλμα, το nginx κρατά την παλιά. Γι' αυτό, μετά από αλλαγή ρυθμίσεων στα nginx, Caddy, SSH και fail2ban, χρησιμοποιήστε reload και ελέγξτε πρώτα τη ρύθμιση (nginx -t, sshd -t, fail2ban-client -t). Δεν υποστηρίζουν όλες οι υπηρεσίες reload. Το systemctl reload-or-restart επιλέγει μόνο του.

Κατά την εκκίνηση: enable και disable

Η εκκίνηση μιας υπηρεσίας και η "εκκίνηση κατά την εκκίνηση του συστήματος" είναι δύο διαφορετικά πράγματα:

anna@web1:~$ sudo systemctl enable nginx         # εκκινεί πλέον κατά την εκκίνηση του συστήματος
anna@web1:~$ sudo systemctl disable nginx        # όχι πλέον κατά την εκκίνηση του συστήματος
anna@web1:~$ sudo systemctl enable --now nginx   # και τα δύο: εκκίνηση τώρα και κατά την εκκίνηση του συστήματος
anna@web1:~$ systemctl is-enabled nginx
enabled

Ένα κλασικό λάθος: ξεκινάτε μια υπηρεσία με start, όλα λειτουργούν, και μετά την επόμενη επανεκκίνηση (για παράδειγμα λόγω ενημέρωσης του kernel, μάθημα 4.2) η υπηρεσία έχει χαθεί. Γι' αυτό, για μια νέα υπηρεσία χρησιμοποιήστε enable --now.

Αν θέλετε να είστε βέβαιοι ότι μια υπηρεσία δεν θα ξεκινήσει ποτέ, ακόμη κι αν τη ζητήσει μια άλλη υπηρεσία, υπάρχει το mask: sudo systemctl mask <dienst>. Το αναιρείτε με unmask.

Τι δεν πάει καλά;

Μία εντολή εμφανίζει όλα τα units που έχουν αποτύχει:

anna@web1:~$ systemctl --failed
  UNIT                LOAD   ACTIVE SUB    DESCRIPTION
● php8.4-fpm.service  loaded failed failed The PHP 8.4 FastCGI Process Manager

1 loaded units listed.

Κάντε το συνήθεια, για παράδειγμα μετά από κάθε επανεκκίνηση και κάθε αναβάθμιση (μάθημα 4.3): η λίστα πρέπει να είναι κενή. Αφού λύσετε το πρόβλημα, αφαιρείτε την ειδοποίηση με sudo systemctl reset-failed.

Μια επισκόπηση όλων των υπηρεσιών που εκτελούνται:

anna@web1:~$ systemctl list-units --type=service --state=running

Αν εκτελείται κάτι που δεν γνωρίζετε ή δεν χρησιμοποιείτε, ερευνήστε τι είναι. Κάθε υπηρεσία που δεν χρειάζεται αποτελεί περιττή επιφάνεια επίθεσης (μάθημα 5.1 και 10.1).

Αρχεία unit και drop-ins

Ένα αρχείο unit είναι ένα αρχείο κειμένου. Η έκδοση του πακέτου βρίσκεται στο /usr/lib/systemd/system/ (σε παλαιότερα συστήματα στο /lib/systemd/system/). Αυτό το αρχείο δεν το αλλάζετε ποτέ: μια ενημέρωση του πακέτου θα το αντικαταστήσει. Τις δικές σας αλλαγές τις βάζετε σε ένα drop-in: ένα μικρό αρχείο που περιέχει μόνο τις γραμμές που θέλετε να αλλάξετε. Ο ευκολότερος τρόπος είναι:

anna@web1:~$ sudo systemctl edit nginx

Ανοίγει ένας editor με ένα κενό τμήμα ανάμεσα σε δύο γραμμές σχολίων. Ό,τι γράψετε εκεί αποθηκεύεται στο /etc/systemd/system/nginx.service.d/override.conf. Για παράδειγμα: αυτόματη επανεκκίνηση του nginx όταν σταματήσει απροσδόκητα.

[Service]
Restart=on-failure
RestartSec=5s

Μετά την αποθήκευση, το systemctl edit επαναφορτώνει αυτόματα τη ρύθμιση του systemd. Αν επεξεργαστείτε ένα αρχείο unit με άλλον τρόπο, εκτελέστε μόνοι σας:

anna@web1:~$ sudo systemctl daemon-reload
anna@web1:~$ sudo systemctl restart nginx

Το daemon-reload κάνει το systemd να διαβάσει ξανά τα αρχεία unit. Η ίδια η υπηρεσία πρέπει μετά να επανεκκινηθεί για να χρησιμοποιήσει την αλλαγή. Το πλήρες αποτέλεσμα (πρωτότυπο μαζί με τα drop-ins) το βλέπετε με systemctl cat nginx.

Το Restart=on-failure είναι καλή πρακτική για σημαντικές υπηρεσίες. Μην κρύβετε όμως με αυτό ένα πραγματικό σφάλμα: μια υπηρεσία που καταρρέει και επανεκκινείται κάθε πέντε δευτερόλεπτα πρέπει να ερευνηθεί στο αρχείο καταγραφής. Το systemd σταματά τις επανεκκινήσεις μετά από μερικές γρήγορες διαδοχικές αποτυχίες (το προεπιλεγμένο όριο είναι πέντε εκκινήσεις μέσα σε δέκα δευτερόλεπτα) και θέτει την υπηρεσία σε failed.

Στα AlmaLinux και Rocky Linux

Τα systemd και systemctl λειτουργούν ακριβώς με τον ίδιο τρόπο. Μόνο τα ονόματα των υπηρεσιών διαφέρουν μερικές φορές: η υπηρεσία SSH ονομάζεται sshd, ο web server της διανομής ονομάζεται httpd (Apache) ή nginx, και το firewall firewalld.

Στην πράξη

Η οθόνη VPS του παρόχου σας (στη WebOké και αλλού) μπορεί να απενεργοποιήσει ολόκληρο τον server, να τον επανεκκινήσει ή να κάνει "αναγκαστική απενεργοποίηση". Το τελευταίο ισοδυναμεί με το να τραβήξετε το καλώδιο από την πρίζα: οι υπηρεσίες δεν έχουν την ευκαιρία να σταματήσουν σωστά και μια βάση δεδομένων μπορεί να καταστραφεί. Μέσα στον server χρησιμοποιήστε sudo systemctl reboot ή sudo shutdown -h now, και στον πίνακα ελέγχου το κανονικό κουμπί τερματισμού ή επανεκκίνησης.

Σύνοψη

  • Το systemd ξεκινά και παρακολουθεί όλες τις υπηρεσίες. Το χειρίζεστε με systemctl.
  • Το systemctl status δείχνει αν μια υπηρεσία εκτελείται, αν ξεκινά κατά την εκκίνηση, καθώς και τις τελευταίες γραμμές καταγραφής.
  • Τα start/stop/restart ισχύουν για τώρα, τα enable/disable για την εκκίνηση. Για μια νέα υπηρεσία χρησιμοποιήστε enable --now.
  • Μετά από αλλαγή ρυθμίσεων: πρώτα έλεγχος, μετά reload. Το systemctl --failed πρέπει να είναι κενό.
  • Μην αλλάζετε ποτέ το αρχείο unit ενός πακέτου. Χρησιμοποιήστε ένα drop-in με systemctl edit.

Κουίζ

1. Ξεκινήσατε μια νέα υπηρεσία με systemctl start. Μετά από επανεκκίνηση του server δεν εκτελείται. Γιατί;



2. Αλλάξατε τη ρύθμιση του nginx. Ποια είναι η ασφαλέστερη σειρά;



3. Πού πρέπει να μπει η δική σας αλλαγή στο αρχείο unit ενός πακέτου;



4. Το systemctl status εμφανίζει Loaded: loaded (...; disabled; ...) και Active: active (running). Τι σημαίνει αυτό;



5. Μια υπηρεσία έχει Restart=on-failure και καταρρέει κάθε λίγα δευτερόλεπτα. Ποια είναι η σωστή χρήση αυτής της ρύθμισης;



Άσκηση

Άσκηση O6.1: Χαρτογράφηση των υπηρεσιών σας. Φτιάξτε στον server σας μια λίστα με όλες τις υπηρεσίες που εκτελούνται (systemctl list-units --type=service --state=running) και ελέγξτε αν το systemctl --failed είναι κενό. Για κάθε υπηρεσία σημειώστε τι κάνει και αν τη χρειάζεστε. Για μία υπηρεσία που δεν γνωρίζατε, ερευνήστε τι είναι (systemctl status, man). Στη συνέχεια ορίστε για μία σημαντική υπηρεσία το Restart=on-failure σε ένα drop-in και ελέγξτε με systemctl cat ότι υπάρχει.

Άσκηση O6.1: Χαρτογράφηση των υπηρεσιών σας

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




Τα τικ και οι σημειώσεις σας παραμένουν μόνο σε αυτό το πρόγραμμα περιήγησης· δεν τα στέλνουμε πουθενά. Αν έχετε εγγραφεί, αποθηκεύουμε στο Τα μαθήματά μου μόνο ότι έχετε ολοκληρώσει την άσκηση.

Για περαιτέρω μελέτη

Μια στιγμή…

Ρυθμίστε τα domains σας

Ρυθμίστε για κάθε domain τους nameservers, τη σύνδεση με το hosting σας και ποιος θα είναι ο κάτοχος.

Φόρτωση των domains σας…