2012-05-22 143 views
4

我試圖通過cron運行casper.js腳本。一切工作正常,當我手動運行該腳本,但是當我通過cron運行它,我得到以下錯誤:從cron運行casper.js腳本

Traceback (most recent call last): 
File "/usr/local/bin/casperjs", line 46, in <module> 
    status = subprocess.call(CASPER_COMMAND) 
File "/usr/lib/python2.6/subprocess.py", line 480, in call 
    return Popen(*popenargs, **kwargs).wait() 
File "/usr/lib/python2.6/subprocess.py", line 633, in __init__ 
    errread, errwrite) 
File "/usr/lib/python2.6/subprocess.py", line 1139, in _execute_child 
    raise child_exception 
OSError: [Errno 2] No such file or directory 

我的crontab條目是:

30 9 * * * /usr/local/bin/casperjs lib/fsaupload.js arg1 arg2 arg3

我也試過

30 9 * * * python /usr/local/bin/casperjs lib/fsaupload.js arg1 arg2 arg3

這給了我相同的結果。有任何想法嗎?我猜這可能是一個path問題,但不知道該從哪裏出發!

回答

4

你或許應該使用絕對路徑到你的卡斯帕腳本,像:

30 9 * * * /usr/local/bin/casperjs /absolute/path/to/lib/fsaupload.js arg1 arg2 arg3 

我的兩分錢。

編輯:

好吧,這是一個有點傻。

$ export PHANTOMJS_EXECUTABLE="/path/to/phantomjs" 

然後運行腳本像往常一樣:

/usr/local/bin/casperjs /absolute/path/to/lib/fsaupload.js arg1 arg2 arg3 

提示:如果你的crontab以其他用戶身份,檢查運行,您還可以通過設置PHANTOMJS_EXECUTABLE環境變量設置爲phantomjs可執行自定義路徑它有權訪問phantomjs路徑。

希望它有助於(和工程)。

再次編輯

等待,你得到的堆棧跟蹤說你使用的是舊版本CasperJS的(如在subprocess模塊不再被使用)。嘗試使用更新的版本:)

+0

嗯......還是什麼都沒有。我仍然得到同樣的錯誤。我甚至嘗試指定Python的完整路徑,但仍然沒有骰子。有任何想法嗎? – Pezholio

+0

編輯,讓我知道:) – NiKo

+0

這就是它 - 謝謝你! :) – Pezholio

3

這是一個較老的問題,但仍然相關 - 我只花了4個小時試圖解決此問題,但未找到直接解決方案。對我來說發生的事情完全一樣,我可以從shell命令行運行casper.js腳本,但不能通過cron作業。正如NiKo所暗示的,但沒有明確說明me得到,casper需要知道Phantomjs在哪裏工作。

我創建了一個shell腳本,cron_wrap.sh,其中包含對Phantomjs bin目錄的路徑:

#!/bin/bash 
PATH=/usr/local/src/phantomjs/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 
/usr/local/bin/casperjs --ignore-ssl-errors=true /srv/www/apps/myscript.js 

讓你.SH可執行文件,現在你可以添加腳本與cron:

00 09 * * * /srv/www/apps/myscript.js 
2

這是一個較老的,較老的問題,但我也處理了一段時間。我不能再通過cron重啓Apache(用於Django)(談論停機時間),這最終成爲了問題。而不是像傑西Q中的包裝腳本中,我只是說我casperjs /幻增加了的PATH我的crontab

PATH=/usr/local/src/phantomjs/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 
/usr/local/bin/casperjs 

的頂部,它現在的作品。您可以通過像這樣在crontab中寫入文件檢查您的cron環境:

* * * * * env > ~/cronenv 

VIM只是把它來查看當前的cron路徑是什麼。很好的調試這個問題。