2011-11-15 85 views
25

我最近添加了一個cron作業,但在發出命令時在路徑中出錯,因此作業從未成功。有什麼方法可以測試我們已經完成的cron更改嗎?測試運行cron條目

請注意,我確實複製並粘貼了命令行中的命令,這只是一個流氓按鍵造成的。

回答

20

這個問題也被問過serverfault and has garnered a couple additional answers

以下是Marco's solution轉述的版本: (不知道是否最好ediquite沒有提供鏈接只能回答或不復制別人的解決方案)

使用臨時cron項創建一個環境文件

* * * * * /usr/bin/env > /home/username/cron-env 

然後創建一個名爲run-as-cron一個shell腳本執行使用塔指令t環境。

#!/bin/sh 

. "$1" 
exec /usr/bin/env -i "$SHELL" -c ". $1; $2" 

然後它被用於這樣的:

run-as-cron <cron-environment> <command> 

例如

run-as-cron /home/username/cron-env 'echo $PATH' 
+0

你從哪裏得到命令**運行-as-cron的**? –

+0

@IgorGanapolsky我不確定,但它可能是上面的shell腳本的名稱。 – ptf

+0

「創建一個名爲run-as-cron的shell腳本」 – RichardAtHome

38

當我想測試我的cron作業時,我通常將間隔設置得非常低,並密切監視日誌。當我確信輸入正確時,我將間隔設置回理智的值。

例如,運行作業每兩分鐘:

*/2 * * * * echo "Hello World"

而且我在我的日誌文件運行tail -f(在Debian /var/log/syslog)。

+6

這就是我所做的,除了有一分鐘......但我希望有一種方法可以讓crontab使用命令運行它,這樣就不必總是等待一分鐘直到crontab執行命令,只是爲了看看它是否會運行。 – Teekin

+0

最接近的是通過運行'/ bin/sh'。再次,你不應該直接從cron運行復雜的命令。改爲使用外部腳本! –

+2

確切的說,當/ bin/sh運行但不是cron作業時,即使它只是等待下一次40-50秒才能調試它,也會非常令人沮喪。 – Teekin

2

喬舒亞的答案不適用於我。兩個問題:在cron-env文件

  • 變量不會被導出(set -a需要)。

  • 腳本仍然綁定到當前tty(需要setsid)。

腳本run-as-cron

#!/bin/sh 

. "$1" 
exec setsid /usr/bin/env -i "$SHELL" -c "set -a; . $1; $2" </dev/null 

沒有足夠的代表」來解決他的答案或添加評論...

0

使用命令crontab -e命令 這將打開一個vim編輯器所有你需要做的是 * * * * * /somepath/urscript.sh,確保在日期和腳本路徑之間有適當的空格 執行後,你可以檢入/ var/spool /郵件會有腳本執行或錯誤的完整跟蹤。 對於測試是沒有辦法..但如果你的urscript.sh工作,然後cron選項卡將沒有問題,因爲它是手動完全相同的事情。