【问题标题】:Watir scripts via launchdWatir 脚本通过 launchd
【发布时间】:2012-10-12 01:48:42
【问题描述】:

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

【问题讨论】:

    标签: ruby automation watir watir-webdriver launchd


    【解决方案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
    

    可能导致问题的另一件事是在没有 gui 环境的情况下运行 firefox。将您的启动脚本移至~/Library/LaunchAgents/ 可能会更好。

    【讨论】:

    • 谢谢,您的回答确实为我指明了正确的方向!
    【解决方案2】:

    它失败了,因为它找不到我的 Gem,它们位于 /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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 2015-03-29
      相关资源
      最近更新 更多