Ang aming wait loop ay naghintay ng 35 oras para sa sarili nito: pgrep -f at pkill -f sa pamamagitan ng SSH

Ops

Noong 31 Oktubre, nagsimula kami ng maliit na loop sa pamamagitan ng SSH: hintayin hanggang matapos ang isang translation job sa ibang machine, pagkatapos ay patakbuhin ang isang follow-up job. Natapos ang translation job sa gabi na iyon. Nang tingnan namin ulit dalawang araw ang nakalipas, ang loop ay naghihintay na ng 35 oras, at hindi kailanman tumakbo ang follow-up.

Ano ang loop

ssh build-host 'while pgrep -f "i18n_job.py example.com" >/dev/null; do sleep 30; done; ./follow-up.sh'

Ang pgrep -f ay tumutugma sa isang pattern sa buong command line ng bawat process. Pinapatakbo ng SSH ang naka-quote na command bilang bash -c 'while pgrep -f "i18n_job.py example.com" …', at ang command line na iyon ay naglalaman ng pattern. Inilalayo ng pgrep ang sarili nitong process mula sa mga resulta, ngunit hindi ang shell na nagsimula nito. Kaya hangga't buhay ang loop, nakakahanap ito ng tugma: ang sarili nito.

Ang kasing-kulay nito: pinapatay ng pkill -f ang shell kung saan ito tumatakbo

Ganito rin ang nangyayari sa pkill -f, na may mas masamang resulta:

ssh build-host 'pkill -f "worker.py --queue a"; nohup python3 worker.py --queue a &'

Ang command line ng shell mismo ay naglalaman ng pattern, kaya pinapatay ng pkill ang shell. Titigil ang worker at hindi na ito muling sisimulan, at lalabas ang SSH na may code 255 nang walang error message. Mukhang problema sa pag-quote ito, na ang akala namin noong unang beses.

Sa pagitan ng Setyembre at katapusan ng Oktubre, nahulog kami sa isa o sa isa pang sitwasyon nang hindi bababa sa isang dosena: mga restart na hindi nangyari, isang loop na nag-hold ng check sa loob ng tatlong oras at kalahating oras, isa pang nag-hold ng translation queue sa loob ng 50 minuto, at ang ito.

Ang ginagawa namin ngayon

Factory Floor, ang kit na pinapatakbo ng aming mga makina, ay gumagana sa pamamagitan ng systemd units: hindi nito hinahanap ang isang process base sa command line nito. Ang mga loop na nagdulot ng problema sa amin ay ang mga itinype namin nang kamay.

Na-update: