EQVPS

Πώς να δημιουργήσετε μια υπηρεσία systemd για να κρατάτε μια εφαρμογή σε λειτουργία

Μετατρέψτε οποιοδήποτε script ή εφαρμογή σε διαχειριζόμενη υπηρεσία που ξεκινά στην εκκίνηση, επανεκκινεί αν κρασάρει και καταγράφει στο journalctl. Γράψτε ένα αρχείο unit, ενεργοποιήστε το και ελέγξτε την κατάστασή του — ο τυπικός τρόπος να τρέχετε κάτι 24/7 στο Linux.

Το να τρέχετε μια εφαρμογή με & ή nohup είναι μια χαρά μέχρι να επανεκκινήσει ο διακομιστής, να κρασάρει η διεργασία ή να θέλετε να βρείτε τα αρχεία καταγραφής της — τότε καταρρέει. Το systemd είναι η τυπική απάντηση: ξεκινά την εφαρμογή σας στην εκκίνηση, την επανεκκινεί αν πεθάνει και καταγράφει τα αρχεία της. Το να μετατρέψετε ένα script ή δυαδικό σε διαχειριζόμενη υπηρεσία είναι ένα μικρό αρχείο.

1. Γράψτε ένα αρχείο unit

Δημιουργήστε το /etc/systemd/system/myapp.service:

[Unit]
Description=My application
After=network.target

[Service]
User=myapp
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/python3 /opt/myapp/run.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Προσαρμόστε τα ExecStart, WorkingDirectory και User στην εφαρμογή σας. Το Restart=always είναι αυτό που την κρατά ζωντανή.

2. Δημιουργήστε έναν αποκλειστικό χρήστη (συνιστάται)

sudo useradd --system --no-create-home --shell /usr/sbin/nologin myapp
sudo chown -R myapp:myapp /opt/myapp

Το να τρέχει ως μη-root χρήστης περιορίζει τη ζημιά αν η εφαρμογή παραβιαστεί ποτέ.

3. Ενεργοποιήστε τη και ξεκινήστε τη

sudo systemctl daemon-reload
sudo systemctl enable --now myapp

Το enable την κάνει να ξεκινά στην εκκίνηση· το --now την ξεκινά αμέσως.

4. Ελέγξτε κατάσταση και αρχεία καταγραφής

sudo systemctl status myapp
journalctl -u myapp -f       # παρακολούθηση ζωντανών αρχείων καταγραφής

Καθημερινές εντολές

sudo systemctl restart myapp   # επανεκκίνηση μετά από αλλαγή
sudo systemctl stop myapp      # σταμάτησέ τη
sudo systemctl disable myapp   # σταμάτα να ξεκινά στην εκκίνηση

Ειλικρινείς προειδοποιήσεις

Επόμενα βήματα

Μια υπηρεσία systemd είναι ο τρόπος που κρατάτε οτιδήποτε σε λειτουργία 24/7 — για παράδειγμα έναν πράκτορα AI που τρέχει όλο το εικοσιτετράωρο ή το relay πίσω από έναν αυτο-φιλοξενούμενο διακομιστή RustDesk. Αν η εφαρμογή σας είναι αντ' αυτού σε container, το --restart unless-stopped του Docker παίζει τον ίδιο ρόλο — δείτε πώς να εγκαταστήσετε το Docker.

Συχνές ερωτήσεις

Γιατί systemd αντί να τρέχω απλώς την εφαρμογή στο παρασκήνιο;

Μια διεργασία στο παρασκήνιο (με & ή nohup) πεθαίνει στην επανεκκίνηση, δεν επιστρέφει αν κρασάρει και σκορπίζει τα αρχεία καταγραφής της. Μια υπηρεσία systemd ξεκινά αυτόματα στην εκκίνηση, επανεκκινεί σε αποτυχία και στέλνει την έξοδό της στο journalctl. Είναι ο τυπικός, αξιόπιστος τρόπος να τρέχετε κάτι μακρόβιο στο Linux.

Πού πάνε τα αρχεία unit;

Οι δικές σας υπηρεσίες πάνε στο /etc/systemd/system/, ένα αρχείο ανά υπηρεσία, με όνομα κάτι.service. Αφού δημιουργήσετε ή επεξεργαστείτε ένα, τρέξτε 'systemctl daemon-reload' ώστε το systemd να πάρει την αλλαγή, μετά ενεργοποιήστε το και ξεκινήστε το.

Τι κάνει το 'Restart=always' και υπάρχουν μειονεκτήματα;

Λέει στο systemd να επανεκκινεί την υπηρεσία κάθε φορά που τερματίζει, για οποιονδήποτε λόγο — το κλειδί για να κρατάτε κάτι σε λειτουργία. Η μόνη παγίδα είναι ένας βρόχος κατάρρευσης: αν η εφαρμογή αποτυγχάνει ακαριαία στην εκκίνηση, το systemd την επανεκκινεί ασταμάτητα. Προσθέστε 'RestartSec=5' για να αραιώσετε τις προσπάθειες και ελέγξτε τα αρχεία καταγραφής για να διορθώσετε το υποκείμενο σφάλμα.

Πώς βλέπω τα αρχεία καταγραφής της υπηρεσίας;

Χρησιμοποιήστε 'journalctl -u yourservice -f' για να παρακολουθείτε τη ζωντανή έξοδο, ή χωρίς -f για να διαβάσετε το ιστορικό. Το systemd καταγράφει το stdout και το stderr αυτόματα, οπότε δεν χρειάζεται να συνδέσετε αρχεία καταγραφής μόνοι σας.

Πρέπει η υπηρεσία να τρέχει ως root;

Κατά προτίμηση όχι. Δημιουργήστε έναν αποκλειστικό μη-root χρήστη και ορίστε 'User=' στο unit, ώστε μια παραβίαση της εφαρμογής να μην παραδίδει όλο το μηχάνημα. Τρέξτε ως root μόνο όταν η υπηρεσία το χρειάζεται πραγματικά.

Σχόλια

Δεν υπάρχουν ακόμη σχόλια. Γίνετε ο πρώτος.

Αφήστε ένα σχόλιο

Τα σχόλια ελέγχονται πριν εμφανιστούν.