
我需要每 15 分鐘執行一次 cron 作業,從 06:05 開始到 22:05 結束。
0 5/15 6-22 * * *
以下語法包括 22:35 和 22:50。
知道如何實現這一目標嗎?是否可以用一條線實現這一點,還是需要配置多條線?
答案1
用一個 cronline 是可能的,但只能用技巧
SHELL=/bin/bash
5-50/15 6-22 * * * [[ '2220 2235 2250' =~ "$(date +\%H\%M)" ]] || /path/to/script
或使用sh
(和bash)
SHELL=/bin/sh
5-50/15 6-22 * * * case "$(date +\%H\%M)" in 2220|2235|2250) ;; *) /path/to/script;;esac
請注意 crontab 所需的百分號 (%) 字元的反斜線轉義。
答案2
*/15 6-22 * * * /path/to/script
或者
5,20,35,50 6-22 * * * /path/to/script
欄位可以是星號 (*),它總是代表「first-last」。允許數字範圍。範圍是用連字號分隔的兩個數字。指定範圍包括在內。例如,「小時」條目的 8-11 指定在 8、9、10 和 11 小時執行。
允許使用清單。列表是一組用逗號分隔的數字(或範圍)。例:“1,2,5,9”,“0-4,8-12”。
步長值可以與範圍結合使用。範圍後面帶有“”指定在該範圍內跳過數字值。例如,可以在小時欄位中使用「0-23/2」來指定每隔一小時執行一次命令(V7標準中的替代方法是「0,2,4,6,8,10,12,14,16 ,18,20,22")。星號後面也允許使用步驟,因此如果您想說“每兩個小時”,只需使用“*/2”。
名稱也可用於「月」和「星期幾」欄位。使用特定日期或月份的前三個字母(不區分大小寫)。不允許使用名稱範圍或清單。
「第六」欄位(該行的其餘部分)指定要執行的命令。該行的整個命令部分(直到換行符或 % 字元)將由 /bin/sh 或 cronfile 的 SHELL 變數中指定的 shell 執行。命令中的百分號 (%),除非以反斜線 () 轉義,否則將被更改為換行符,並且第一個 % 之後的所有資料都將作為標準輸入發送到命令。
注意:命令執行的日期可以由兩個欄位指定 - 月份中的某一天和星期幾。如果兩個欄位都受到限制(即不是 *),則當任一欄位與目前時間相符時將執行該指令。例如,「30 4 1,15 * 5」將導致命令在每月 1 日和 15 日以及每個星期五的凌晨 4:30 運行。
答案3
我個人會把它分成兩行:
5-50/15 6-21 * * * /path/to/script
5 22 * * * /path/to/script
第一行覆蓋 0605-2150,第二行 - 在 2205 進行額外運行。
如果你真的想要一個班輪,我會進行不精確的檢查,以適應可能不精確的工作開始時間:
5-50/15 6-22 * * * [[ $(date +"\%-H\%M") -le 2210 ]] && /path/to/script
答案4
雖然有點晚了,但為了完整起見,您可以在 CronBuddy.com 上獲取任何 cron 表達式的未來運行時間列表 - 這是查看將要發生的情況的簡單方法。