使用Linux的Crontab执行定时任务
首先说说cron,它是一个linux下的定时执行工具。
根用户以外的用户可以使用 crontab
工具来配置 cron
任务。
所有用户定义的 crontab
都被保存在 /var/spool/cron
目录中,并使用创建它们的用户身份来执行。
要以某用户身份创建一个 crontab
项目,登录为该用户,然后键入 crontab -e
命令来编辑该用户的 crontab
。
该文件使用的格式和 /etc/crontab
相同。当对 crontab
所做的改变被保存后,该 crontab
文件就会根据该用户名被保存,并写入文件 /var/spool/cron/username
中。cron
守护进程每分钟都检查 /etc/crontab
文件、etc/cron.d/
目录、以及 /var/spool/cron
目录中的改变,如果发现了改变,它们就会被载入内存。
这样,当某个 crontab
文件改变后就不必重新启动守护进程了。
CentOS7安装crontab:
1 | yum install crontabs |
常用操作:
- 查看状态:
systemctl status crond
- 启动:
systemctl start crond
- 停止:
systemctl stop crond
- 重启:
systemctl restart crond
- 重载配置:
systemctl reload crond
使用示例:
每一小时执行myscript.php:
1 | # crontab -e |
下面的例子是使用CURL访问URL来每5分执行PHP脚本:
1 | */5 * * * * /usr/bin/curl -o temp.txt http://www.9iqu.cn/myscript.php |
crontab 参数:
-e
编辑该用户的计时器设置。-l
列出该用户的计时器设置。-r
删除该用户的计时器设置。-u <用户名称>
指定要设定计时器的用户名称。
crontab 格式:
分钟 | 小时 | 日 | 月 | 星期 | 执行命令 |
---|---|---|---|---|---|
* | * | * | * | * | * |
- 第1列表示分钟1~59 每分钟用*或者 */1表示
- 第2列表示小时1~23(0表示0点)
- 第3列表示日期1~31
- 第4列 表示月份1~12
- 第5列标识号星期0~6(0表示星期天)
- 第6列要执行的命令
记住几个特殊符号的含义:
“*”代表取值范围内的数字,
“/”代表”每”,
“-”代表从某个数字到某个数字,
“,”分开几个离散的数字
crontab 文件的一些例子:
- 每晚的21:30重启apache:
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
- 每月1、10、22日的4 : 45重启apache:
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
- 每周六、周日的1:10重启apache:
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
- 每天18:00至23:00之间每隔30分钟重启apache:
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
- 晚上11点到早上7点之间,每隔一小时重启apache:
0 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
- 每月的4号与每周一到周三的11点重启apache:
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart