EQVPS

Κρατήστε ένα bot σε λειτουργία 24/7 σε VPS (ώστε να μην πεθαίνει ποτέ σιωπηλά)

Jun 15, 2026 · 3 λεπτά ανάγνωσης · EQVPS Team

Υπάρχουν δύο τρόποι με τους οποίους ένα bot «δεν λειτουργεί» σε έναν server. Ο προφανής: σταματά τη στιγμή που κλείνετε το SSH. Ο ύπουλος: τρέχει μια χαρά για δύο μέρες, κρασάρει στις 4 π.μ. σε κάποιο unhandled σφάλμα, και το μαθαίνετε ώρες αργότερα όταν κάποιος ρωτά γιατί είναι κάτω. Και οι δύο έχουν την ίδια λύση, και δεν είναι το «θυμήσου να το επανεκκινήσεις» — είναι η παράδοση της δουλειάς στο systemd, που κρατά τα πράγματα ενεργά ώστε να μη χρειάζεται εσείς.

Γιατί πεθαίνει όταν αποσυνδέεστε

Αν το εκκινήσατε με python bot.py στη συνεδρία SSH σας, η διεργασία είναι παιδί αυτής της συνεδρίας. Κλείστε τη συνεδρία, η διεργασία φεύγει μαζί της. Τα nohup και & καλύπτουν αυτό, αλλά δεν σας δίνουν restart-on-crash και start-on-boot — οπότε λύσατε το μικρό πρόβλημα και κρατήσατε το μεγάλο.

Η πραγματική λύση: ένα systemd service

Αυτό είναι όλο το πράγμα. Δημιουργήστε το /etc/systemd/system/mybot.service:

[Unit]
Description=My bot
After=network-online.target

[Service]
WorkingDirectory=/home/youruser/mybot
ExecStart=/home/youruser/mybot/venv/bin/python bot.py
Restart=always
RestartSec=5
User=youruser
Environment=API_KEY=...

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now mybot

Δύο γραμμές κάνουν τη βαριά δουλειά:

Όταν εξακολουθεί να μη συμπεριφέρεται — διαβάστε τα logs

Ένα bot που συνεχίζει να crash-loop-άρει δεν διορθώνεται με σκληρότερη επανεκκίνηση· κάτι πραγματικά πάει στραβά. Το systemd συλλαμβάνει το stdout/stderr, οπότε:

systemctl status mybot          # up or down, last exit code
journalctl -u mybot -n 100      # recent logs + the error it died on
journalctl -u mybot -f          # follow live

Η αιτία είναι σχεδόν πάντα ακριβώς εκεί: ένα λείπον environment variable, μια unhandled exception, ένα API timeout, ένα OOM kill. Διορθώστε αυτό — το Restart=always είναι δίχτυ ασφαλείας, όχι θεραπεία για ένα πραγματικό bug.

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

Πότε το tmux ή το pm2 βγάζουν νόημα αντ' αυτού

Το systemd δεν είναι η μόνη απάντηση, απλώς η καλύτερη προεπιλογή:

Για ένα μεμονωμένο πάντα-ενεργό bot ή πράκτορα, το systemd είναι το απλούστερο πράγμα που πραγματικά λειτουργεί — είναι ήδη στον server, δεν χρειάζεται επιπλέον εργαλεία, και κάνει restart, boot-start και logging εκτός συσκευασίας.

Η έντιμη κατακλείδα

Το uptime δεν αφορά έναν μεγαλύτερο server ή περισσότερη πειθαρχία — αφορά το να μη δένετε τη διεργασία σας με το laptop σας. Τυλίξτε την σε ένα systemd unit με Restart=always και enable, και ελέγχετε το journalctl όταν κάτι πάει στραβά. Κάντε το μία φορά και το bot σας μένει ενεργό είτε παρακολουθείτε είτε κοιμάστε. (Νέο box; Κλειδώστε το πρώτα — ένα bot 24/7 είναι επίσης ένας στόχος 24/7.)


Χρειάζεστε κάπου να το τρέξετε; Ένα Nano πακέτο ($3/μήνα) κρατά ένα bot ζωντανό 24/7 — το systemd κάνει τα υπόλοιπα.

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

Γιατί σταματά το bot μου όταν κλείνω το SSH;

Επειδή το ξεκινήσατε μέσα στη συνεδρία SSH σας, οπότε είναι δεμένο με αυτή τη συνεδρία και πεθαίνει όταν αποσυνδεθείτε. Η λύση είναι να το τρέξετε ως background service ανεξάρτητο από τη σύνδεσή σας — το systemd είναι ο καθαρός τρόπος, το tmux ο γρήγορος.

Πώς κάνω auto-restart ένα bot όταν κρασάρει;

Τρέξτε το ως systemd service με Restart=always και μια μικρή καθυστέρηση RestartSec. Το systemd μετά το ξαναεκκινεί μέσα σε δευτερόλεπτα από κάθε crash, επ' αόριστον, χωρίς νταντά. Αυτή η μεμονωμένη γραμμή είναι η διαφορά μεταξύ «πέθανε στις 4 π.μ.» και «αναβόσβησε και ανάρρωσε».

Πώς κάνω ένα bot να ξεκινά αυτόματα μετά από επανεκκίνηση;

systemctl enable το service σας. Το 'enable' το συνδέει να ξεκινά στο boot, το 'start' το τρέχει τώρα — κάντε και τα δύο (systemctl enable --now). Μετά από κάθε επανεκκίνηση, το bot επιστρέφει μόνο του χωρίς να συνδεθείτε.

systemd ή pm2 ή tmux — ποιο να χρησιμοποιήσω;

systemd για οτιδήποτε πραγματικό και μακρόβιο: χειρίζεται restart, boot-start και logging εγγενώς, χωρίς επιπλέον εργαλεία. Το tmux είναι εξαιρετικό για μια γρήγορη δοκιμή ή παρακολούθηση μιας διαδραστικής εκτέλεσης. Το pm2 είναι λογικό αν ζείτε στο Node και θέλετε το dashboard του, αλλά είναι ένα ακόμη πράγμα να κρατάτε σε λειτουργία. Για ένα μεμονωμένο πάντα-ενεργό bot, το systemd κερδίζει στην απλότητα.

Πώς βλέπω γιατί το bot μου συνεχίζει να κρασάρει;

Το journalctl -u yourbot -n 100 δείχνει τα πρόσφατα logs και το σφάλμα στο οποίο πέθανε· προσθέστε -f για ζωντανή παρακολούθηση. Εδώ συνήθως κρύβεται η πραγματική αιτία — ένα λείπον env var, μια unhandled exception, ένα API timeout. Διορθώστε αυτό, μην επανεκκινείτε τυφλά.

← Πίσω στο BlogΔείτε πακέτα & τιμές →

Σχόλια

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

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

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