bot በserver ላይ "አይሠራም" የሚልባቸው ሁለት መንገዶች አሉ። ግልጹ: SSH በዘጉ ቅጽበት ይቆማል። ተንኮለኛው: ለሁለት ቀን በደንብ ይሄዳል፣ በ4am በሆነ ያልተያዘ error crash ያደርጋል፣ እና አንድ ሰው ለምን down እንደሆነ ሲጠይቅ ከሰዓታት በኋላ ታውቃላችሁ። ሁለቱም ተመሳሳይ fix አላቸው፣ እና "እንደገና ማስጀመር አስታውስ" አይደለም — ስራውን ለsystemd ማስረከብ ነው፣ ነገሮችን up ስለሚያቆይ እርስዎ እንዳታደርጉ።
ሲወጡ ለምን ይሞታል
በSSH sessionዎ ውስጥ በpython bot.py ካስጀመሩት፣ processው የዚያ session ልጅ ነው። sessionን ይዝጉ፣ processው አብሮ ይሄዳል። nohup እና & ይህን ይሸፍናሉ፣ ግን restart-on-crash እና start-on-boot አይሰጡዎትም — ስለዚህ ትንሹን ችግር ፈትተው ትልቁን ይዘዋል።
እውነተኛው fix: 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
ሁለት መስመሮች ከባዱን ስራ ይሠራሉ:
Restart=always— botው crash ያደርጋል፣ systemd በ5 ሰከንድ ይመልሰዋል። ያ የ4am ሞት ማንም የማያስተውለው የ5-ሰከንድ blip ይሆናል።enable— ከreboot በኋላ በራሱ እንደገና ይጀምራል። "ኦህ፣ serverሩ reboot አደረገ እና ሁሉንም እንደገና ማስጀመር ረሳሁ" የለም።
አሁንም መጥፎ ባህሪ ሲያሳይ — logs ያንብቡ
crash-loop የሚያደርግ bot ጠንክሮ በ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
ምክንያቱ ማለት ይቻላል ሁልጊዜ ልክ እዚያ ነው: የጎደለ environment variable፣ ያልተያዘ exception፣ API timeout፣ OOM kill። ያንን ያስተካክሉ — Restart=always የደኅንነት መረብ ነው፣ ለእውነተኛ bug መድኃኒት አይደለም።
ጠቃሚ ምክር: logs botው ለmemory እየተገደለ ካሳዩ፣ boxን አድገዋል — sizing guide ይመልከቱ።
tmux ወይም pm2 በምትኩ መቼ ትርጉም እንዳላቸው
systemd ብቸኛው መልስ አይደለም፣ ብቻ ምርጡ ነባሪ:
- tmux — ለፈጣን ፈተና ወይም interactive process ለመመልከት ፍጹም። ያሂዱ፣ ይንቀሉ፣ በኋላ እንደገና ያገናኙ። ግን በcrash restart አያደርግም ወይም reboot አይተርፍም፣ ስለዚህ ለproduction አይደለም።
- pm2 — አስቀድሞ በNode ዓለም ውስጥ ከሆኑ እና process dashboardውን ከፈለጉ ምክንያታዊ። ወጥመዱ: pm2 ራሱ አሁን በሕይወት ማቆየት ያለብዎ process ነው (ብዙ ጊዜ... በsystemd)። ለአንድ bot፣ ያ የማያስፈልግዎ layer ነው።
ለአንድ always-on bot ወይም agent፣ systemd በእውነት የሚሠራ ትንሹ ነገር ነው — አስቀድሞ በserver ላይ ነው፣ ተጨማሪ tooling አያስፈልገውም፣ እና restart፣ boot-start እና logging out of the box ያደርጋል።
ታማኝ መደምደሚያ
Uptime ስለ ትልቅ server ወይም ስለ ተጨማሪ discipline አይደለም — processዎን ከlaptopዎ ስለ አለማያያዝ ነው። ከRestart=always እና enable ጋር በsystemd unit ውስጥ ይሸፍኑት፣ እና የሆነ ነገር ሲበላሽ journalctl ይፈትሹ። ያንን አንድ ጊዜ ያድርጉ እና botዎ እየተመለከቱ ወይም እየተኙ up ይቆያል። (አዲስ box? መጀመሪያ ይቆልፉት — 24/7 bot 24/7 target ም ነው።)
የሚያሄዱበት ቦታ ይፈልጋሉ? Nano plan ($3/ወር) botን 24/7 በሕይወት ያቆያል — systemd ቀሪውን ያደርጋል።
አስተያየቶች
እስካሁን አስተያየቶች የሉም። መጀመሪያ ይሁኑ።