Bash 用于检查应用程序是否正在运行的脚本;如果没有,就开始吧
我在Mac上运行应用程序“OsiriX MD”。有时它会莫名其妙地“退出”。我想每小时运行一个脚本,以检查它是否正在运行。如果没有,我想重新开始。这样行吗Bash 用于检查应用程序是否正在运行的脚本;如果没有,就开始吧,bash,macos,shell,variable-assignment,quotes,Bash,Macos,Shell,Variable Assignment,Quotes,我在Mac上运行应用程序“OsiriX MD”。有时它会莫名其妙地“退出”。我想每小时运行一个脚本,以检查它是否正在运行。如果没有,我想重新开始。这样行吗 #!/bin/bash PROCESS=OsiriX MD number=$(ps aux | grep $PROCESS | wc -l) if [ $number -gt 0 ] then open $PROCESS; fi 我建议使用pgrep检查进程是否未(!)运行: 请参阅:man-pgrep流域util(在基于Deb
#!/bin/bash
PROCESS=OsiriX MD
number=$(ps aux | grep $PROCESS | wc -l)
if [ $number -gt 0 ]
then
open $PROCESS;
fi
我建议使用
pgrep
检查进程是否未(!
)运行:
请参阅:
man-pgrep
流域
util(在基于Debian的发行版中,使用apt-install-waterminal
安装它)可能很有用
说明:减少多余的命令执行分水岭可以围绕命令运行,以便任何进一步尝试
在另一个副本运行时运行该命令将只产生一个副本
初步的进一步尝试 要使用它,第一个实例(以及所有进一步的尝试)应该从以下内容开始:
watershed "OsiriX MD" &
或者如果OsiriX MD
需要终端本身:
watershed "OsiriX MD"
这将在~/.dwident/
中保存一个特殊的锁定文件,该文件将在以后检查。如果OsiriX MD
仍在运行,则waterwater
将等待它停止运行,然后运行它。如果OsiriX MD
未运行,则waterrence
将运行它
一个明显的错误:第三个实例似乎被忽略了。例如,假设我们在终端A上运行
流域mc
,然后在终端B上运行,然后在终端C上运行。我们将看到A上运行mc
,B&C上运行流域mc
。现在在A上关闭mc
,在B上我们将看到mc
的新实例,在C上,mc仍在等待。现在关闭B上的mc
,C显示命令提示符——第三个实例无用地等待。另一方面,如果我们一直等到在A上关闭mc
,然后在C上运行Waterline mc
,然后在B上关闭mc,那么mc
将在C上运行。有两个实例工作正常。到目前为止,我已经成功地使用了这段代码:
#/bin/bash
process=“OsiriX\MD”
如果pgrep-f“$process”;然后
打开-a/Applications/OsiriX\MD.app/Contents/MacOS/OsiriX\MD;
fi
有人看到它有潜在的问题吗
谢谢你的建议
HowardA
launchd
agent和keepAlive
键可能是更好的选择。
watershed "OsiriX MD"