Kuna njia mbili ambazo bot "haifanyi kazi" kwenye seva. Ile ya wazi: inaacha sekunde unapofunga SSH. Ile ya kijanja: inaendesha vizuri kwa siku mbili, inaanguka saa 4 asubuhi kwa error fulani isiyoshughulikiwa, nawe unagundua masaa baadaye mtu anapouliza kwa nini iko down. Zote zina suluhu ileile, nayo si "kumbuka kuirestart" — ni kukabidhi kazi kwa systemd, ambayo huweka mambo juu ili wewe usilazimike.
Kwa nini inakufa unapoingia nje
Kama uliizindua na python bot.py katika kikao chako cha SSH, process ni child wa kikao hicho. Funga kikao, process inakwenda nayo. nohup na & hupaka juu ya hili, lakini hawakupi restart-kwenye-crash na start-kwenye-boot — hivyo umesuluhisha tatizo dogo na kuweka kubwa.
Suluhu halisi: huduma ya systemd
Hii ndio chose nzima. Unda /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
Mistari miwili inafanya kazi nzito:
Restart=always— bot inaanguka, systemd inairudisha kwa sekunde 5. Kifo hicho cha saa 4 asubuhi kinakuwa pepesa la sekunde 5 ambalo hakuna anayelinga.enable— inaanza tena baada ya reboot, yenyewe. Hakuna "oh, seva ilirestart nami nikasahau kuzindua kila kitu tena."
Wakati bado inabadsahi — soma logs
Bot inayoendelea crash-loop hairekebishwi kwa kurestart kwa nguvu zaidi; kitu kimekwenda vibaya kweli. systemd hukamata stdout/stderr, hivyo:
systemctl status mybot # juu au chini, exit code ya mwisho
journalctl -u mybot -n 100 # logs za hivi karibuni + error iliyoifanya ikufe
journalctl -u mybot -f # fuata live
Sababu karibu daima iko pale pale: environment variable iliyokosekana, unhandled exception, API timeout, OOM kill. Rekebisha hilo — Restart=always ni jal ya usalama, si tiba ya bug halisi.
Kidokezo: kama logs zinaonyesha bot ikiuawa kwa kumbukumbu, umezidi sanduku — angalia mwongozo wa sizing.
Wakati tmux au pm2 zinaleta maana badala yake
systemd si jibu pekee, ni chaguo-msingi bora tu:
- tmux — kamili kwa jaribio la haraka au kuangalia process ya interactive. Endesha, detach, reattach baadaye. Lakini haitarestart kwenye crash au kubaki kupitia reboot, hivyo si kwa production.
- pm2 — ya busara kama tayari uko katika ulimwengu wa Node na unataka process dashboard yake. Kero: pm2 yenyewe ni process ambayo sasa lazima uiweke hai (kwa kawaida... kupitia systemd). Kwa bot moja, hiyo ni tabaka usiyoihitaji.
Kwa bot moja ya kila wakati au agent, systemd ndiyo kitu rahisi zaidi kinachofanya kazi kweli — tayari iko kwenye seva, haihitaji tooling ya ziada, na hufanya restart, boot-start na logging out of the box.
Mstari wa chini wa uaminifu
Uptime si kuhusu seva kubwa zaidi au nidhamu zaidi — ni kuhusu kutounganisha process yako na laptop yako. Ilipiga katika systemd unit na Restart=always na enable, na angalia journalctl wakati kitu kimeenda vibaya. Fanya hilo mara moja na bot yako inabaki juu iwe unaangalia au umelala. (Sanduku jipya? Lifunge kwanza — bot ya 24/7 pia ni lengo la 24/7.)
Unahitaji mahali pa kuiendesha? Mpango wa Nano ($3/mwezi) huweka bot hai 24/7 — systemd hufanya mengine.
Maoni
Bado hakuna maoni. Kuwa wa kwanza.