2012-10-12 83 views
0

可能我不能使用launchd,因爲我找不到明確的NO。所以,這裏的問題...通過launchd的Watir腳本

我想運行我的Watir腳本過去一小時,每小時10分鐘。該腳本啓動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文件到/庫/ LaunchAgents但它是完全相同的結果。

此外,我不認爲這是一個文件路徑問題。當我提供完整的文件路徑時,正如我在這裏所做的那樣,這些腳本可以在任何目錄中正常運行。

我可以不使用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 

,可能會導致問題將運行Firefox瓦特/ OA GUI環境的另一件事。您可能有更好的運氣將您的啓動腳本移動到~/Library/LaunchAgents/

+0

謝謝,你的回答真指着我的正確的方向! –

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