Watir脚本通过launchd

时间:2012-10-12 01:48:42

标签: ruby automation watir watir-webdriver launchd

我可能无法使用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

echo用于调试目的。

当我将plist文件放在/ Library / LaunchDaemons中时,脚本会运行,我会看到“Hello”写入文本文件。然后,当它击中Ruby部分时失败。当我查看system.log时,我看到:

com.apple.launchd.peruser.502[118] (client_checkout[25285]): Exited with code: 1

我尝试将plist文件切换到/ Library / LaunchAgent,但结果完全相同。

另外,我认为这不是文件路径问题。当我提供完整的文件路径时,正如我在这里所做的那样,这些脚本可以在任何目录中正常运行。

我不能以这种方式使用launchd吗?我做错了吗?这是怎么回事?谢谢!

2 个答案:

答案 0 :(得分: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

可能导致问题的另一件事是运行firefox w / o gui环境。您可以更好地将启动脚本移至~/Library/LaunchAgents/

答案 1 :(得分:0)

它失败了,因为它无法找到我的Gems,它们位于/Users/chris/.rvm中,而不是/ usr /。找到我需要添加到RVMs网站上的脚本,现在我正在运行!对于遇到相同问题的其他人,可以在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"

fi