我有一個用戶選擇何時運行腳本的表單。我有fields {time,day of week, first/last}
。現在,當用戶選擇例如:每個第一個星期一上午10:45 - 這意味着每個月的每個第一個星期一運行腳本,我如何將其轉換爲cron工作。Cron作業運行每個月的每週的第一個或最後一個選擇日期
謝謝。
我有一個用戶選擇何時運行腳本的表單。我有fields {time,day of week, first/last}
。現在,當用戶選擇例如:每個第一個星期一上午10:45 - 這意味着每個月的每個第一個星期一運行腳本,我如何將其轉換爲cron工作。Cron作業運行每個月的每週的第一個或最後一個選擇日期
謝謝。
不幸的是,一個crontab項中的日期和星期幾字段被ORed在一起而不是AND。所以你不能單獨使用crontab字段來完成「本月的第一個星期一」你需要額外的邏輯。你可以做這樣的事情:
min hr 1-7 * * [ `date +%w` -eq 1 ] && first-monday.sh
找到一個工作日的最後一個實例是有點棘手,因爲它取決於有多少天都在每個月:
min hr 25-31 1,3,5,7,8,10,12 * [ `date +%w` -eq 5 ] && last-friday.sh
min hr 24-30 4,6,9,11 * [ `date +%w` -eq 5 ] && last-friday.sh
min hr 22-28 2 * [ `date +%w` -eq 5 ] && last-friday.sh
在閏年中二月第二十九日落在星期五,最後一個入口實際上將在第二十二日運行腳本,但是因爲cron作業不能指定一年,所以大概是儘可能接近。
謝謝,但上週五會說些什麼呢?也是對的,對於第一我只需要插入其他日子的一週。例如星期三的小時1-7 * 3? – zulq 2013-05-11 16:20:46
@zulq編輯了上個星期五的例子。要運行命令前的最後一列是週日數:0 =週日至6日=週六。 – 2013-10-30 01:26:26
'min hr 1-7 * 1 first-monday.sh'將實際執行本月的前7天和每個星期一。該網站(https://www.pantz.org/software/cron/croninfo.html)給出以下注意事項:命令執行的日期可以由兩個字段指定 - 日期和星期幾。如果兩個字段都受限制(即不是*),則當任一字段與當前時間匹配時,將運行該命令。例如,「30 4 1,15 * 5」會導致命令在每個月的1號和15號以及每個星期五的凌晨4點30分運行。 – 2016-06-29 02:17:05
下面的答案,但這屬於超級用戶,而不是stackoverflow。 – 2013-05-11 15:12:13