有可能我不能使用launchd来做这件事,我只是找不到任何明确说不的东西。所以,这是个问题...
我希望每小时过10分钟运行我的Watir脚本。此脚本启动Firefox,执行测试,并将结果记录到标准输出。我这样设置我的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>client_checkout</string>
<key>Program</key>
<string>/Users/chris/svn/qa/watir/tests/client.sh</string>
<key>StartCalendarInterval</key>
<dict>
<key>Minute</key>
<integer>52</integer>
</dict>
</dict>
</plist>在我拥有的shell脚本中:
echo 'hello' >> /Users/chris/results.txt
ruby /Users/chris/svn/qa/watir/tests/client_checkout.rb回声是为了调试目的而存在的。
当我将plist文件放在/Library/LaunchDaemons中时,脚本运行,我看到'Hello‘写到了文本文件中。然后,当它命中Ruby部分时,它将失败。当我查看system.log时,我看到:
com.apple.launchd.peruser.502[118] (client_checkout[25285]): Exited with code: 1我尝试将plist文件切换到/Library/LaunchAgents,但结果完全相同。
另外,我不认为这是文件路径问题。当我提供完整的文件路径时,就像我在这里所做的那样,这些脚本可以从任何目录运行。
我不能这样使用launchd吗?我是不是“做错了”?到底怎么回事?谢谢!
发布于 2012-10-12 11:40:04
我可以想到两件事,这可能是问题所在。环境可能未正确设置。我会尝试从sh (或bash)运行它,也许还会检查以确保像您的$PATH这样的东西是按照您期望的方式配置的。
<?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>client_checkout</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string> <!-- New bit here -->
<string>/Users/chris/svn/qa/watir/tests/client.sh</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Minute</key>
<integer>52</integer>
</dict>
</dict>
</plist>如果您想要检查环境,您可以将脚本更改为如下所示:
env > /Users/chris/Desktop/launchdenv.txt另一件可能导致问题的事情是在没有gui环境的情况下运行firefox。您可能会更幸运地将您的启动脚本转移到~/Library/LaunchAgents/。
发布于 2012-10-13 02:08:20
它失败是因为它找不到我的Gems,它在/Users/chris/.rvm中,而不是/usr/中。在RVM网站上找到了我需要添加到我的脚本中的内容,现在我正在运行!对于其他有同样问题的人,可以在@ https://rvm.io/workflow/scripting/中找到您需要的RVM代码
具体地说,将以下代码添加到shell脚本的开头:
# Load RVM into a shell session *as a function*
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
# First try to load from a user install
source "$HOME/.rvm/scripts/rvm"
elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then
# Then try to load from a root install
source "/usr/local/rvm/scripts/rvm"
else
printf "ERROR: An RVM installation was not found.\n"
fihttps://stackoverflow.com/questions/12851133
复制相似问题