Το να τρέχετε μια εφαρμογή με & ή 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 # σταμάτα να ξεκινά στην εκκίνηση
Ειλικρινείς προειδοποιήσεις
- Τρέξτε
daemon-reloadμετά την επεξεργασία ενός αρχείου unit, αλλιώς το systemd χρησιμοποιεί την παλιά έκδοση. - Προσοχή στους βρόχους κατάρρευσης. Αν η εφαρμογή αποτυγχάνει ακαριαία, το
Restart=alwaysξαναπροσπαθεί επ' άπειρον — τοRestartSec=5αραιώνει τις προσπάθειες· διορθώστε το ριζικό σφάλμα μέσω των αρχείων καταγραφής. - Προτιμήστε ένα μη-root
User=ώστε μια παραβιασμένη εφαρμογή να μην κατέχει όλο τον διακομιστή.
Επόμενα βήματα
Μια υπηρεσία systemd είναι ο τρόπος που κρατάτε οτιδήποτε σε λειτουργία 24/7 — για παράδειγμα έναν πράκτορα AI που τρέχει όλο το εικοσιτετράωρο ή το relay πίσω από έναν αυτο-φιλοξενούμενο διακομιστή RustDesk. Αν η εφαρμογή σας είναι αντ' αυτού σε container, το --restart unless-stopped του Docker παίζει τον ίδιο ρόλο — δείτε πώς να εγκαταστήσετε το Docker.
Σχόλια
Δεν υπάρχουν ακόμη σχόλια. Γίνετε ο πρώτος.