簡體   English   中英

檢查進程是否運行,如果不執行script.sh

[英]Check if process runs if not execute script.sh

我試圖找到一種監控過程的方法。 如果該進程未運行,則應再次檢查以確保它確實崩潰了。 如果確實崩潰,請運行​​腳本(start.sh)

我嘗試了不成功的監控,也嘗試了在crontab中添加此腳本:我使用chmod + x monitor.sh使其可執行。

實際程序稱為program1

case "$(pidof program | wc -w)" in

0)  echo "Restarting program1:     $(date)" >> /var/log/program1_log.txt
/home/user/files/start.sh &
;;
1)  # all ok
;;
*)  echo "Removed double program1: $(date)" >> /var/log/program1_log.txt
kill $(pidof program1 | awk '{print $1}')
;; 
esac

問題是此腳本無法正常工作,我將其添加到crontab並將其設置為每2分鍾運行一次。 如果我關閉程序,它將不會重新啟動。

還有其他方法可以檢查進程,並在崩潰后運行start.sh?

不客氣,但您是否考慮過更明顯的解決方案?

當外殼程序(例如bash或tcsh)啟動子進程時,默認情況下它將等待該子進程完成。

那么,為什么沒有在while(1)循環中運行您的進程的shell? 每當該進程由於某種原因(無論合法與否)終止時,它將自動重新啟動您的進程。

我在mythtv中遇到了同樣的問題。 后端一直崩潰在我身上。 這是一個Heisenbug。 每月發生一次(平均)。 很難追蹤。 所以我只寫了一個在xterm中運行的小腳本。

oninter業務意味着control-c將終止子進程,而不是我的(父進程)腳本。 同樣,睡眠在那里,所以我可以多次控制-c殺死子進程,然后在睡眠時殺死父進程腳本...

Coredumpsize受到限制是因為我不想用無法使用的corefile填充磁盤。

#!/bin/tcsh -f

limit coredumpsize 0

while( 1 )

   echo "`date`:  Running mythtv-backend"

      # Now we cannot control-c this (tcsh) process...
   onintr -

      # This will let /bin/ls directory-sort my logfiles based on day & time.
      # It also keeps the logfile names pretty unique.
   mythbackend |& tee /....../mythbackend.log.`date "+%Y.%m.%d.%H.%M.%S"`

      # Now we can control-c this (tcsh) process.
   onintr

   echo "`date`:  mythtv-backend exited.  Sleeping for 30 seconds, then restarting..."
   sleep 30

end

ps如果子進程立即死亡,那么睡眠也可以為您節省時間。 否則,不斷重生而不會造成延遲,將使您的IO和CPU癱瘓,從而難以糾正問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM