Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 检查进程是否正在运行的脚本,如果它没有运行,则执行代码行_Linux_Bash_Process_Debian - Fatal编程技术网

Linux 检查进程是否正在运行的脚本,如果它没有运行,则执行代码行

Linux 检查进程是否正在运行的脚本,如果它没有运行,则执行代码行,linux,bash,process,debian,Linux,Bash,Process,Debian,如何创建一个脚本来检查一个进程是否正在运行,当它没有运行时执行一行代码?让脚本每分钟检查一次 我在想这样的事情: #! /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) &am

如何创建一个脚本来检查一个进程是否正在运行,当它没有运行时执行一行代码?让脚本每分钟检查一次

我在想这样的事情:

#! /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:如果发现流程,则不执行任何操作

*:如果找到多个进程,请停止最后一个进程

有两个代码需要执行:

mono runtime Program.exe-选项1是-选项2否-选项3 6

分号后面是:1

这样做正确吗 (mono runtime Program.exe-option1 yes-option2 no-option3 6;1)&

monit(小型软件)将为您完成所有这些工作:

请看这里:

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

IIUC您正在尝试确保您的程序始终有一个实例在计算机上运行。您是否考虑过将此程序添加到
/etc/inittab
?使用此文件,您可以配置init系统,以便在程序退出(崩溃)时为您运行程序并重新启动。
更多信息:

我更愿意建议一些锁定机制,例如从program.exe中打开套接字、创建私有MMAP、锁定特定的临时文件等。如果锁获取失败,则不做任何操作退出在您的bash脚本中,只需触发新的进程启动。@anishsane这是为了使它更仔细?是的,这似乎是一个选项,我想我也可以使用Crontab来计时检查。那么您就不需要cron了。Monit的工作原理就像一个恶魔,它会检查进程是否正在运行,若并没有,Monit会重新启动它,所以它可以帮助您始终保持进程正常运行。