የመጠባበቂያ ሉፃችን ራሱን ለመጠበቅ 35 ሰዓቶች ቆይቷል፡ በSSH በኩል pgrep -f እና pkill -f

ኦፕስ

በ31 ጥር ትንሽ ሉፕ በSSH በኩል ጀመርን፡ በሌላ ማሽን ላይ ያለ የትርጉም ስራ ሲጠናቀቅ ድረስ መጠበቅ፣ ከዚያም ተከታይ ስራን ማሽከርከር። የትርጉም ስራው በዚያው ሌሊት ተጠናቀቀ። ከሁለት ቀናት በኋላ ስንመለከት፣ ሉፑ ለ35 ሰዓቶች እየጠበቀ ነበር፣ ተከታዩ ስራ ግን ፈጽሞ አልተሰራም።

ሉፑ ምን ነበር

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

pgrep -f ንድፉን ከእያንዳንዱ ሂደት ሙሉ የትዕዛዝ መስመር ጋር ያነጻጽራል። SSH የተጠቀሰውን ትዕዛዝ እንደ bash -c 'while pgrep -f "i18n_job.py example.com" …' ያሽከርክራል፣ ያ ትዕዛዝ መስመርም ንድፉን ይዟል። pgrep የራሱን ሂደት ከውጤቶች ያስወግዳል፣ ነገር ግን የጀመረውን ሼል አያስወግድም። ስለዚህ ሉፑ ሕያው እስከሆነ ድረስ፣ ግጭት ያገኛል፡ ራሱን።

እንደ ወንድሙ፡ pkill -f የሚሰራበትን ሼል ይገድላል

ተመሳሳይ ነገር ከpkill -f ጋር ይከሰታል፣ ውጤቱም የተሻለ አይደለም፡

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

የሼሉ የራሱ የትዕዛዝ መስመር ንድፉን ስለያዘ፣ pkill ሼሉን ይገድላል። ሠራተኛው ቆሟል እና እንደገና አልተጀመረም፣ SSHም ሳይሆን በስህተት መልእክት ያለው ኮድ 255 ይወጣል። የጥቅስ ችግር ይመስላል፣ በመጀመሪያ ጊዜ እኛም እንደዚያ አድርገን ነበር የወሰድነው።

ከመስከረም እስከ ጥር መጨረሻ ቢያንስ አስር ጊዜ ወደ አንዱ ወይም ወደ ሌላው ወድቀናል፡ ፈጽሞ ያልተከሰቱ እንደገና ማስጀመሪያዎች፣ ለሦስት ሰዓት እና ግማሽ ሰዓት ማረጋገጫን የያዘ ሉፕ፣ ሌላውም የትርጉም ወረፋን ለ50 ደቂቃ የያዘ፣ እና ይህም።

አሁን የምናደርገው

Factory Floor ማሽኖቻችንን የሚያስኬደው የሶፍትዌር ጥቅል፣ በsystemd ክፍሎች (units) ይሰራል፡ ምንጊዜም ሂደትን በትዕዛዝ መስመሩ (command line) አይፈልግም። የጎዱንን ዑደቶች እኛ በእጅ የጻፍናቸው ነበሩ።

ተሻሽሏል: