CRON - 在第 25 - 36 週期間的第 1-5 天執行

CRON - 在第 25 - 36 週期間的第 1-5 天執行

有沒有辦法安排CRON的執行:

  • 僅在一年中的第 25 - 36 週期間
  • 僅限週一至週五(週末除外)

這是因為暑假期間人們對我們的產品下了很多訂單。每週更改 CRON 設定是相當乏味的。我知道 @weekly 不能與星號設定結合使用,因此以下內容不是有效的標記:

* * 1,2,3,4,5 * * @weekly php /app/cmd import >> /logs/cron-offers.log

答案1

您應該能夠透過以下方式執行此操作:

# m h  dom mon dow   command
* * * * 1-5 /bin/bash -c "if [ `date +%W` -lt 15 ] && [ `date +%W` -gt 11 ]; then php /app/cmd import >> /logs/cron-offers.log; fi"

將正確的周數填入第一個和第二個“[]”。

答案2

Cron 被認為是一個非常基本的調度程序,其語法不允許管理員輕鬆制定稍微不常見的調度程序。 Stock cron 沒有可用的周數,因此您必須發揮創意。

根據ncal -w 2018第25-36周是:

    May               June              July              August          September
Mo     7 14 21 28        4 11 18 25        2  9 16 23 30     6 13 20 27       3
Tu  1  8 15 22 29        5 12 19 26        3 10 17 24 31     7 14 21 28       4
We  2  9 16 23 30        6 13 20 27        4 11 18 25     1  8 15 22 29       5
Th  3 10 17 24 31        7 14 21 28        5 12 19 26     2  9 16 23 30       6
Fr  4 11 18 25        1  8 15 22 29        6 13 20 27     3 10 17 24 31       7
Sa  5 12 19 26        2  9 16 23 30        7 14 21 28     4 11 18 25      1   8
Su  6 13 20 27        3 10 17 24        1  8 15 22 29     5 12 19 26      2   9
   18 19 20 21 22    22 23 24 25 26    26 27 28 29 30 31 31 32 33 34 35  35  36 

一種方法是建立多個批次,組合起來創建您想要的計劃。例如,首先簡單地選擇 6 月最後兩週的工作日,然後在第二個作業中選擇 7 月和 8 月的所有工作日,最後選擇 9 月的第一天作為第三個作業:

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |

* * 18,19,20,21,22,25,26,26,28,29 jun * php /app/cmd import >> /logs/cron-offers.log
* * * jul,aug mon,tue,wed,thu,fri       php /app/cmd import >> /logs/cron-offers.log
* * 3-7 9 *                             php /app/cmd import >> /logs/cron-offers.log

另一種選擇是簡單地每天運行批次處理,並使用適當的程式設計/腳本語言的更強大的語法,讓批次本身(即您的 PHP 程式碼)確定它是否應該立即執行或退出。

相關內容