একটি সার্ভারে একটি bot "কাজ করে না" দুই উপায়ে। স্পষ্টটা: আপনি SSH বন্ধ করার সেকেন্ডে এটি থামে। চতুরটা: এটি দুই দিন ভালোই চলে, ভোর 4টায় কোনো unhandled error-এ ক্র্যাশ করে, আর কেউ জিজ্ঞেস করলে যে এটি down কেন তখন ঘণ্টা পরে আপনি জানেন। দুটোরই একই সমাধান, আর এটি "restart করতে মনে রাখা" নয় — এটি কাজটা systemd-কে দেওয়া, যা জিনিস চালু রাখে যাতে আপনাকে করতে না হয়।
আপনি log out করলে এটি মরে কেন
আপনি এটি আপনার SSH সেশনে python bot.py দিয়ে চালু করলে, process সেই সেশনের একটি child। সেশন বন্ধ করুন, process এর সাথে যায়। nohup ও & এটি ঢেকে দেয়, কিন্তু এরা আপনাকে কোনো restart-on-crash ও start-on-boot দেয় না — তাই আপনি ছোট সমস্যা সমাধান করে বড়টা রেখে দিয়েছেন।
আসল সমাধান: একটি 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=always— bot ক্র্যাশ করে, systemd এটিকে 5 সেকেন্ডে ফিরিয়ে আনে। ওই ভোর 4টার মৃত্যু একটি 5-সেকেন্ডের ঝলকে পরিণত হয় যা কেউ টের পায় না।enable— এটি একটি reboot-এর পরে নিজে থেকে আবার শুরু হয়। কোনো "ওহ, সার্ভার restart হয়েছিল আর আমি সব পুনরায় চালু করতে ভুলে গেছি" নয়।
যখন এটি তবুও খারাপ আচরণ করে — log পড়ুন
যে bot crash-loop করতে থাকে তা কঠোরভাবে restart করে ঠিক হয় না; কিছু আসলে ভুল। systemd stdout/stderr ধরে, তাই:
systemctl status mybot # up বা down, শেষ exit code
journalctl -u mybot -n 100 # সাম্প্রতিক log + এটি যে error-এ মরেছে
journalctl -u mybot -f # live অনুসরণ করুন
কারণ প্রায় সবসময় ঠিক সেখানে: একটি অনুপস্থিত environment variable, একটি unhandled exception, একটি API timeout, একটি OOM kill। সেটি ঠিক করুন — Restart=always একটি safety net, একটি আসল bug-এর নিরাময় নয়।
টিপ: log যদি bot-কে memory-র জন্য kill হতে দেখায়, আপনি বক্সটি ছাড়িয়ে গেছেন — sizing গাইড দেখুন।
কখন বরং tmux বা pm2 মানায়
systemd একমাত্র উত্তর নয়, কেবল সেরা ডিফল্ট:
- tmux — একটি দ্রুত পরীক্ষা বা একটি ইন্টারঅ্যাক্টিভ process দেখার জন্য নিখুঁত। চালান, detach করুন, পরে reattach করুন। কিন্তু এটি ক্র্যাশে restart হবে না বা একটি reboot টেকাবে না, তাই এটি production-এর জন্য নয়।
- pm2 — যুক্তিসঙ্গত যদি আপনি ইতিমধ্যেই Node জগতে থাকেন ও এর process dashboard চান। খটকা: pm2 নিজে একটি process যা আপনাকে এখন জীবিত রাখতে হবে (সাধারণত... systemd-র মাধ্যমে)। একটি bot-এর জন্য, ওটা একটি স্তর যা আপনার লাগে না।
একটি একক always-on bot বা agent-এর জন্য, systemd সবচেয়ে সরল জিনিস যা আসলে কাজ করে — এটি ইতিমধ্যেই সার্ভারে, কোনো বাড়তি tooling লাগে না, ও restart, boot-start ও logging out of the box করে।
সৎ শেষ কথা
Uptime একটি বড় সার্ভার বা বেশি শৃঙ্খলা নিয়ে নয় — এটি আপনার process আপনার ল্যাপটপের সাথে না-বাঁধা নিয়ে। এটিকে Restart=always ও enable সহ একটি systemd unit-এ মুড়ুন, ও কিছু ভুল হলে journalctl চেক করুন। এটি একবার করুন আর আপনি দেখুন বা ঘুমান, আপনার bot চালু থাকে। (নতুন বক্স? আগে এটি লক করুন — একটি 24/7 bot একটি 24/7 লক্ষ্যও।)
এটি চালানোর জন্য একটি জায়গা দরকার? একটি Nano প্ল্যান ($3/মাস) একটি bot 24/7 জীবিত রাখে — systemd বাকিটা করে।
মন্তব্য
এখনো কোনো মন্তব্য নেই। প্রথম হোন।