2014-10-07 72 views
2

如何創建腳本來檢查進程是否正在運行以及何時未運行時執行一行代碼?讓腳本每分鐘檢查一次?檢查進程是否正在運行,如果沒有運行的腳本執行代碼行

我在想是這樣的:

#! /bin/bash 
case "$(pidof Program.exe | wc -w)" in 
0) echo "Restarting Program: $(date)" >> /var/log/ProgramLog.txt 
(mono-runtime Program.exe -option1 yes -option2 no -option3 6; 1) & 
;; 
1) # all ok 
;; 
*) echo "Removed double Program: $(date)" >> /var/log/ProgramLog.txt 
kill $(pidof Program.exe | awk '{print $1}') 
;; 
esac 

0:如果沒有找到處理執行代碼

1:如果過程中發現什麼都不做

*:如果有發現超過1個過程停止最後一個過程

有2個要執行的代碼:

單運行的Program.exe -option1是-option2沒有-option3 6

和分號後面:1

這是做正確的方式?: (單運行的Program.exe - option1是-option2否-option3 6; 1)&

+0

我寧願建議一些鎖機制,例如,打開一個套接字,創建一個私人MMAP,從program.exe中鎖定一個特定的臨時文件等。如果該鎖獲取失敗,則不做任何事情就退出。 &在你的bash腳本中,只需觸發新的啓動過程。 – anishsane 2014-10-07 13:54:05

+0

@anishsane這是爲了更仔細嗎? – Zero 2014-10-07 15:09:29

回答

1

的monit的(小軟件)會做這一切的工作適合你:

請看這裏:

https://mmonit.com/monit/documentation/ 
+0

是的,這似乎是一個選項,我想我也可以使用Crontab來檢查時間。 – Zero 2014-10-07 15:08:07

+0

然後你不需要cron。 Monit作爲一個惡魔,它檢查進程是否正在運行,如果不是monit重新啓動它,所以它可以幫助你隨時保持進程。 – RaFD 2014-10-07 15:44:27

0

IIUC你想確保總有一個實例你程序在機器上運行。您是否考慮過將此程序添加到/etc/inittab?有了這個文件,你可以配置你的init系統爲你運行程序,並在它退出(崩潰)時重新啓動。 一些更多的信息:http://unixhelp.ed.ac.uk/CGI/man-cgi?inittab+5

相關問題