如何在每周日运行crontab任务

333

我正在尝试弄清楚如何在每周日运行一个crontab任务。我认为以下内容应该可以实现,但我不确定是否理解正确。以下内容是否正确?

5 8 * * 6

7
问题是关于“星期日”的,但被接受的答案是关于“星期六”的。? - inigomedina
14
使用 https://crontab.guru/ 网站创建任何 Cron 表达式。 - nbi
11个回答

581

这里是对crontab格式的解释。

# 1. Entry: Minute when the process will be started [0-60]
# 2. Entry: Hour when the process will be started [0-23]
# 3. Entry: Day of the month when the process will be started [1-28/29/30/31]
# 4. Entry: Month of the year when the process will be started [1-12]
# 5. Entry: Weekday when the process will be started [0-6] [0 is Sunday]
#
# all x min = */x

根据这个,你的 5 8 * * 0 将会在每个星期天的8:05运行。


173
为了让内容更易读,你可以使用 sun, mon, tue, wed, thu, frisat 中的一个来表示日期。这样还可以避免在星期日时选择使用 07 - flu

248

要在星期天执行cron作业,可以使用以下任一方法:

5 8 * * 0
5 8 * * 7
5 8 * * Sun

其中5 8代表这件事情会在一天中的8:05发生。

通常,如果你想在星期日执行某项任务,请确保第五列包含07Sun中的任何一个。由于您设置的是6,所以它在星期六运行。

cronjobs的格式为:

 +---------------- minute (0 - 59)
 |  +------------- hour (0 - 23)
 |  |  +---------- day of month (1 - 31)
 |  |  |  +------- month (1 - 12)
 |  |  |  |  +---- day of week (0 - 6) (Sunday=0 or 7)
 |  |  |  |  |
 *  *  *  *  *  command to be executed

您可以随时使用 crontab.guru 作为编辑器来检查您的cron表达式。


16
为了帮助他人避免我刚刚犯的愚蠢错误,请确保你将分钟设置为其他值而不是*,否则它将在该小时的每一分钟执行! - user2924019

45

以下是crontab文件的格式。

{minute} {hour} {day-of-month} {month} {day-of-week} {user} {path-to-shell-script}

因此,要在每个星期日午夜运行(星期日通常为0,在某些罕见情况下为7):

0 0 * * 0 root /path_to_command

1
投票支持提到如何指定每次运行的命令。 (但是,通过“crontab”命令进行编辑时需要省略用户列。) - Joachim Wagner
2
周日午夜是周一的0点,即 0 0 * * 1 - Fred Loney
@FredLoney 感谢您指出这一点。“天文学家和军方使用的系统中,午夜为0小时。在该系统中,今晚的午夜是明天的第一个时刻。但对于我们其他人来说 - 没有官方答案。这就是为什么航空公司总是将航班安排在晚上11:59或凌晨12:01而不是午夜的原因。”通过https://earthsky.org/space/edit-time - PJ Brunet
只是想指出一个潜在的“陷阱”,默认情况下,cronjobs 是按照 UTC 时间调度的(比东海岸时间提前 4 小时)。 - dgg

28

6

在指定cron值时,您需要确保这些值落在范围内。例如,某些cron在星期几使用0-7的范围,其中0和7都代表星期日。但我们不像这样做(请参见下文)。

Seconds: 0-59
Minutes: 0-59
Hours: 0-23
Day of Month: 1-31
Months: 0-11
Day of Week: 0-6

reference: https://github.com/ncb000gt/node-cron


3
"我们"是指谁?是哪个程序和版本? - Massimo
它直接来自链接:D - Naik Ashwini

5

我想你会喜欢这个交互式网站,它经常帮助我构建复杂的Crontab指令:https://crontab.guru/


3
定时任务表达式 - 人性化地解释 Crontab builder - 定时任务表达式生成器。

1
在我看来,这不是一个答案,因为它没有为此处添加任何内容,也没有以任何方式回答这个问题。 - Pankaj

2

@weekly 对我来说更好! 例如,添加以下crontab -e,它将在每个星期日的凌晨0点工作: @weekly /root/fd/databasebackup/week.sh >> ~/test.txt


1
* * * * 0 

you can use above cron job to run on every week on sunday, but in addition on what time you want to run this job for that you can follow below concept :

* * * * *  Command_to_execute
- � � � -
| | | | |
| | | | +�� Day of week (06) (Sunday=0) or Sun, Mon, Tue,...
| | | +���- Month (112) or Jan, Feb,...
| | +����-� Day of month (131)
| +������� Hour (023)
+��������- Minute (059)

1

10 * * * Sun

Position 1 for minutes, allowed values are 1-60
position 2 for hours, allowed values are 1-24
position 3 for day of month ,allowed values are 1-31
position 4 for month ,allowed values are 1-12 
position 5 for day of week ,allowed values are 1-7 or and the day starts at Monday. 

2
恭喜您在StackOverflow上的第一个回答!请务必查看回答指南。例如,回答通常应该提供一些现有回答中缺失的新信息。 - doz10us
9
这将在周日运行24次,每小时的第10分钟。 - Jens Timmerman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接