EQVPS

שמרו בוט רץ 24/7 על VPS (כך שהוא לעולם לא מת בשקט)

15 ביוני 2026 · 2 דק' קריאה · EQVPS Team

יש שתי דרכים שבהן בוט "לא עובד" על שרת. הברורה: הוא נעצר ברגע שאתם סוגרים את SSH. הערמומית: הוא רץ בסדר יומיים, קורס ב-4 לפנות בוקר על איזו שגיאה לא-מטופלת, ואתם מגלים שעות אחר כך כשמישהו שואל למה הוא למטה. לשניהם אותו תיקון, וזה לא "לזכור להפעיל אותו מחדש" — זה למסור את העבודה ל-systemd, ששומר דברים למעלה כדי שאתם לא תצטרכו.

למה הוא מת כשאתם מתנתקים

אם הפעלתם אותו עם python bot.py בסשן ה-SSH שלכם, התהליך הוא צאצא של הסשן הזה. סגרו את הסשן, התהליך הולך איתו. nohup ו-& מטייחים את זה, אבל הם לא נותנים לכם restart-בקריסה ולא התחלה-באתחול — אז פתרתם את הבעיה הקטנה ושמרתם את הגדולה.

התיקון האמיתי: שירות systemd

זה כל הדבר. צרו /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

שתי שורות עושות את ההרמה הכבדה:

כשהוא עדיין מתנהג לא כשורה — קראו את הלוגים

בוט שממשיך ללולאת-קריסה לא מתוקן על ידי restart חזק יותר; משהו באמת לא בסדר. 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

הסיבה כמעט תמיד ממש שם: משתנה סביבה חסר, חריגה לא-מטופלת, timeout של API, הריגת OOM. תקנו את זהRestart=always היא רשת ביטחון, לא תרופה לבאג אמיתי.

טיפ: אם הלוגים מראים את הבוט נהרג בגלל זיכרון, גדלתם מעבר לארגז — בדקו את מדריך המדידה.

מתי tmux או pm2 הגיוניים במקום

systemd אינו התשובה היחידה, רק ברירת המחדל הטובה ביותר:

לבוט תמיד-מקוון בודד או סוכן, systemd הוא הדבר הפשוט ביותר שבאמת עובד — הוא כבר על השרת, לא צריך כלים נוספים, ועושה restart, התחלה-באתחול ו-logging מהקופסה.

השורה התחתונה הכנה

זמן פעילות אינו על שרת גדול יותר או יותר משמעת — הוא על לא לקשור את התהליך שלכם למחשב הנייד שלכם. עטפו אותו ב-unit של systemd עם Restart=always ו-enable, ובדקו את journalctl כשמשהו לא בסדר. עשו את זה פעם אחת והבוט שלכם נשאר למעלה בין אם אתם צופים ובין אם ישנים. (ארגז חדש? נעלו אותו קודם — בוט 24/7 הוא גם מטרה 24/7.)


צריכים איפה להריץ אותו? תוכנית Nano ($3/חודש) שומרת בוט חי 24/7 — systemd עושה את השאר.

שאלות נפוצות

למה הבוט שלי נעצר כשאני סוגר את SSH?

כי הפעלתם אותו בתוך סשן ה-SSH שלכם, אז הוא קשור לסשן הזה ומת כשאתם מתנתקים. התיקון הוא להריץ אותו כשירות רקע שבלתי-תלוי בהתחברות שלכם — systemd הוא הדרך הנקייה, tmux היא הדרך המהירה.

איך אני עושה auto-restart לבוט כשהוא קורס?

הריצו אותו כשירות systemd עם Restart=always ועיכוב RestartSec קטן. systemd אז מפעיל מחדש את התהליך תוך שניות מכל קריסה, ללא הגבלה, ללא בייביסיטר. השורה הבודדת הזו היא ההבדל בין 'הוא מת ב-4 לפנות בוקר' ל'הוא הבליח והתאושש.'

איך אני גורם לבוט להתחיל אוטומטית אחרי אתחול?

systemctl enable לשירות שלכם. 'enable' מחווט אותו להתחיל באתחול, 'start' מריץ אותו עכשיו — עשו את שניהם (systemctl enable --now). אחרי כל אתחול, הבוט חוזר בעצמו בלי שתתחברו.

systemd או pm2 או tmux — במה כדאי לי להשתמש?

systemd לכל דבר אמיתי וארוך-חיים: הוא מטפל ב-restart, התחלה-באתחול ו-logging באופן מקורי, ללא כלים נוספים. tmux נהדר לבדיקה מהירה או לצפייה בריצה אינטראקטיבית. pm2 סביר אם אתם חיים ב-Node ורוצים את לוח הבקרה שלו, אבל זה עוד דבר לשמור רץ. לבוט תמיד-מקוון בודד, systemd מנצח בפשטות.

איך אני רואה למה הבוט שלי ממשיך לקרוס?

journalctl -u yourbot -n 100 מראה את הלוגים האחרונים ואת השגיאה שהוא מת עליה; הוסיפו -f כדי לעקוב חי. כאן בדרך כלל הסיבה האמיתית מתחבאת — משתנה env חסר, חריגה לא-מטופלת, timeout של API. תקנו את זה, אל תפעילו מחדש בעיוורון.

← חזרה לבלוגראו תוכניות ומחירים →

תגובות

אין עדיין תגובות. היו הראשונים.

השאירו תגובה

התגובות עוברות מודרציה לפני שהן מופיעות.