0

有可能我不能为此使用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吗?我“做错了”吗?这是怎么回事?谢谢!

4

2 回答 2

1

我可以想到两件事可能是那里的问题。环境可能没有正确设置。我会尝试从 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

可能导致问题的另一件事是在 w/oa gui 环境下运行 firefox。将您的启动脚本移动到~/Library/LaunchAgents/.

于 2012-10-12T03:40:03.710 回答
0

它失败了,因为它找不到我的 Gems,它们位于 /Users/chris/.rvm,而不是 /usr/。在 RVMs 网站上找到了我需要添加到我的脚本中的内容,现在我正在运行!对于其他有同样问题的人,您需要从 RVM 获得的代码可以在 @ https://rvm.io/workflow/scripting/找到

具体来说,将其添加到 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"

fi
于 2012-10-12T18:08:20.353 回答