2009-11-16 33 views
0

我有一個包含像http://gist.github.com/235833這樣的系統命令的ruby腳本,當我從shell運行這個腳本時,它工作正常,但是當我將它添加到我的cron作業列表中時,它不再起作用,cron作業如下所示:如何使用cron作業調用包含系統命令的ruby腳本?

10/* * * * * cd/home/hekin;/usr/bin/ruby​​ my_script.rb

任何想法我做了什麼錯?謝謝。

+1

「不起作用」不是很有幫助。提供的錯誤是什麼? – 2009-11-16 09:58:55

+0

@Damien,沒有錯誤信息(如果有的話,我不知道在哪裏可以找到它),問題是用cronjob,我無法獲取遠程文件,但使用shell命令,我可以 – leomayleomay 2009-11-16 10:13:08

+0

你試圖執行一些scp命令(如給定的URL http://gist.github.com/235833)?你有沒有在遠程機器上安裝ssh密鑰?或者你可以嘗試使用SFTP gem來獲取SCPing文件,而不是系統內部的scp。 – bhups 2009-11-16 11:13:42

回答

0

嘗試分離可能出錯的事物。我能想到的是:

  • cron語法 - 是給定的時間值合法和適合你的shell?
  • 權限 - 對相關目錄和文件執行權限和讀取權限
  • 引用 - cron涵蓋的範圍是什麼?它只運行第一個命令嗎?

爲了剖析這個,我建議你先運行一個非常簡單的cron工作,比如'ls'。接下來運行一個單線程腳本。接下來將您的命令嵌入到shell腳本文件中。沿着這些線路,你應該找到問題。

+0

@Yuval,我已經嘗試了你提到的所有3個項目,沒有運氣,但無論如何感謝你,令人印象深刻的 – leomayleomay 2009-11-16 12:04:52

0

問題在於你的環境。在您的外殼中進行測試時,您的外殼環境會提供充足的裝備和提升。在cron下運行時,它非常非常精簡。

目的地在哪裏「。」爲你的腳本?我想這將是「/」,可能不是「$ HOME」,因此你的腳本將無法在該位置寫入並失敗。嘗試使用目標的絕對路徑。

+0

@Comradin,絕對路徑不起作用。更糟糕的是,我不知道錯誤信息在哪裏。 – leomayleomay 2009-11-16 11:57:29

+0

嗯,你可以做一些像「scp user @ host:/ target/file/dest/file_log 2>&1>/path/to/my_log」這樣你會在my_log文件中看到錯誤信息。 – Comradin 2009-11-16 12:29:23

1

謝謝大家的回答。

這是我的錯誤。

由於我在本地機器上使用ssh密鑰轉發,而我從shell執行腳本時,ssh密鑰轉發相關的環境變量都在那裏,但是從cron作業上下文中缺少那些環境變量。