2010-03-08 34 views
5

我有一個bash腳本,它運行一個ruby腳本來獲取我的twitter提要。腳本在命令行中成功執行,但不是作爲cronjob

## /home/username/twittercron 

#!/bin/bash 

cd /home/username/twitter 
ruby twitter.rb friends 

它在命令行中成功運行。

/home/username/twittercron 

但是,當我嘗試運行它作爲一個cronjob,它運行,但無法提取飼料。

## crontab -e 

*/15 * * * * * /home/username/twittercron 

該腳本已被chmod + x。不知道爲什麼它是這樣的。有任何想法嗎?

回答

11

Ruby Version Manager(rvm)導致該問題。我不得不像這樣在cron中調用腳本。

*/15 * * * * bash -c 'source /home/username/.rvm/scripts/rvm && /usr/bin/env ruby /home/username/twitter/twitter.rb friends' 
+0

我一直在試圖解決這個問題大約一個星期。非常感謝你做的這些! – 2010-05-11 15:38:20

+0

你最受歡迎。 – JasonOng 2010-06-02 07:48:50

+0

您可以改爲使用源代碼來取代您的整個bashrc。 '源$ HOME/.bashrc && ...' – kch 2010-07-28 19:22:55

0

您需要提供執行命令(或通過env)的絕對路徑。

*/15 * * * * * /usr/bin/env sh /home/username/twittercron 

或者:

*/15 * * * * * /usr/bin/env ruby /home/username/twitter/twitter.rb friends 
+1

這是他正在運行的bash腳本。 – ghostdog74 2010-03-08 01:05:42

+0

我試過了你的替代建議。這仍然不好... – JasonOng 2010-03-08 02:08:15

+0

你期待什麼結果?它是否寫出到文件或數據庫?還是你只是在等待crontab的stdout被系統郵寄給你? – bojo 2010-03-08 02:25:09

0

你有一個太多*在你的crontab。

+0

對不起,這是一個錯字。我有正確的沒有。 *的。 – JasonOng 2010-03-08 02:07:08

0

檢查您的郵件,看看是否有任何錯誤消息。在你的bash腳本中加入一些調試,例如echo done>debug.log在最後一行,看看是否創建了debug.log。刪除腳本中的## /home/username/twittercron,並將#!/bin/bash放在第一行。

*/15 * * * * * /bin/bash /home/username/twittercron 
+0

而不是debug.log,試試:'MAILTO = your @ email.addy'(在crontab中),然後運行'/ bin/bash -x/home/username/twittercron'作爲cron命令。這將在最後發送完整的跟蹤郵件。 – 2010-03-08 01:10:43

+0

我的/ var/log/syslog&/var/log/cron.log顯示該命令已運行但未引發錯誤。 – JasonOng 2010-03-08 02:09:53

1

我已經使用http://github.com/javan/whenever

它使用一個Ruby的DSL來管理後臺任務,它處理設置所有環境魔術很好的經驗。

every 3.hours do 
    runner "MyModel.some_process" 
    rake "my:rake:task" 
    command "/usr/bin/my_great_command" 
end 
9

我認爲可以只通過強制的bash作爲一個登錄shell來完成,所以源的.bashrc等:

*/15 * * * * * /bin/bash -l -c '/home/username/twittercron' 

Here是關於這個的文章。

相關問題