Shell-Script

為什麼 crontab 可以使用萬用字元 (*) 而不是數字?

  • February 15, 2017

我想在我的 Raspberry Pi(執行 Raspbian Jessie)上每天 10:25(確切時間並不重要)執行一個腳本。

使用該行:25 10 * * * /home/pi/test.sh 它沒有給出任何結果,沒有輸出,也沒有活動日誌。

我試過了* * * * * /home/pi/test.sh,奇蹟發生了!它工作正常,CMD (/home/pi/test.sh)在 cron 日誌中生成,並創建了所需的輸出文件。

我用於測試目的的腳本:

#!/bin/bash
echo `date` > /home/pi/test.txt

有人知道為什麼 cron 不執行腳本嗎?

從 crontab 聯機幫助頁

當分鐘、小時和月份欄位與目前時間匹配時,cron(8) 將執行命令,並且兩個日期欄位(月份中的日期或星期幾)中的至少一個與目前時間匹配

您需要有一個日期欄位。如果您希望它每天在 10:25 執行,只需使用

25 10 * * 0-6 /home/pi/test.sh

**編輯:**這實際上是不正確的,因為所有 * 都將 crontab 標記為每分鐘執行一次。我們發現這是系統時間問題。仔細檢查您的系統時間。cron 守護程序在 UTC 之外執行。由於腳本在您將所有欄位設置為 * 時有效,因此我們知道實際的邏輯是有效的。

為了簡化,我會將這份工作列為:

25 10 * * * date > /home/pi/test.txt

這將在上午 10:25 執行。如果此時它沒有執行,請檢查時區/etc/default/cron並在需要時進行更改。更改後您將要重新啟動服務service cron restart

引用自:https://unix.stackexchange.com/questions/344897