昨天参加某司的在线笔试,里面问到了 crontab 的命令格式,当时记得比较模糊,但是后来查证还是选对了。不过我更惊讶的是题目里竟然问了两道 Spring 配置文件的问题,真是的!

crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,Linux发行版基本上都会包含该工具,并且会自动启动crond进程,crond进程每分钟会定期检查执行任务。

基本格式

1
2
*  *  *  *  *  command 
分  时  日  月  周  命令

第1列表示分钟1~59 每分钟用或者 /1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

示例

1
10 1 * * 6,0 service nginx restart

表示每周六、周日的1 : 10重启Ngxin

1
* 23-7/1 * * * java -jar /home/www/vblue_project/vblue.jar restart

表示晚上11点到早上7点之间,每隔一小时重启一下我的应用

1
0 0 1 * * /usr/loaclhost/nginx/conf/ssl/renew_cert.sh >/dev/null 2>&1

表示每月更新我的签名证书

使用

crontab -e开始编辑文件内容
crontab 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
0 0 1 * * /usr/loaclhost/nginx/conf/ssl/renew_cert.sh >/dev/null 2>&1

crontab file [-u user] 用指定的文件替代目前的crontab
crontab-[-u user] 用标准输入替代目前的crontab
crontab-1[user] 列出用户目前的crontab
crontab-e[user] 编辑用户目前的crontab
crontab-d[user] 删除用户目前的crontab
crontab-c dir 指定crontab的目录