2010-09-06 156 views
0

你好大方的电脑!Shell脚本变量错误?

所以我有一个launchd plist项目,每隔30秒调用一次下面的shell脚本。它检查程序是否正在运行,如果没有,它会重新启动它。或者至少这是它应该做的。

问题是,即使进程已被终止,shell脚本仍在声明进程仍在运行。我认为这是因为布尔值不被重置(或者沿着这些线)。任何帮助?

n=`ps -ef | grep Intel | grep -v grep | wc -l` 

if [ $n -gt 0 ] 

then 

     echo `date` CURRENTLY RUNNING. >> /Library/A_Intel_WATCHDOG/A_Intel_WatchLog.txt 

else 

    echo `date` not running. ATTEMPTING RESTART... >> /Library/A_Intel_WATCHDOG/A_Intel_WatchLog.txt 
    cd /Library/LaunchAgents/ 
    launchctl load com.Intel.plist 

fi 

编辑1

有人建议,增加了“保活”的说法可能是一个很好的解决方案,以我的一般问题。任何意见?

这里将是我更新的plist文件应当保证我的应用程序一直运行永远:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
     <key>Label</key> 
    <string>com.Intel</string> 
    <key>OnDemand</key> 
    <true/> 
    <key>ProgramArguments</key> 
    <array> 
     <string>/Library/LaunchAgents/Contents/Intel</string> 
    </array> 
    <key>RunAtLoad</key> 
    <true/> 
    <key>KeepAlive</key> 
    <true/> 
</dict> 
</plist> 

我很想听到的话,人们认为这是正确与否。非常感谢!

+0

'ps -ef | grep Intel | grep -v grep | wc -l'或'ps -ef | grep Intel | grep -v grep | wc -l'输出?问题可能是这个过程在某种程度上仍然存在。 – aularon 2010-09-06 19:20:00

+0

检查英特尔进程是否正在运行:) – 2010-09-06 19:21:20

+0

对不起,我不小心发送了,现在检查:) – aularon 2010-09-06 19:21:56

回答

1

要解决眼前的问题,尝试登录的ps命令的输出:

processes=`ps -ef | grep [I]ntel` 
if [ -n "$processes" ] 
then 
    echo `date` CURRENTLY RUNNING. "$processes" >> /Library/A_Intel_WATCHDOG/A_Intel_WatchLog.txt 
... 

我怀疑还有别的运行(甚至脚本本身)匹配英特尔;这会在日志中告诉你。

但是,我认为这是无关紧要的,因为这个脚本似乎试图解决在其他地方更好解决的问题:launchd完全能够监视和重新启动它管理的进程(这是它的一个重要特性)。只需添加

<key>KeepAlive</key> 
<true/> 

到/Library/LaunchAgents/com.Intel.plist,launchd将重新启动程序本身。

顺便说一句,如果你由于某种原因确实需要手动重新启动launchd管理的进程,launchctl load是错误的咒语 - 你想launchd start

+0

嗨戈登,谢谢你的所有努力。请检查我的编辑并让我知道你的想法。再次感谢;) – 2010-09-06 23:47:58

+1

我想删除' OnDemand'位(这是一个不赞成的方式说*不*以吉普工作活着,我不知道它将如何与KeepAlive交互),并移动脚本/程序到/ Library/LaunchAgents /(应该在那里的东西只有.plist文件;可能是创建/库/脚本/并放在那里)。 – 2010-09-07 07:35:25