2014-10-07 86 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

相关问题