在开发或者运维时,有很多任务是需要定时来完成的,日志切割,数据库定期备份,设备状态确认等等,在 Linux
下定时任务的执行使用 crontab
来管理,作为一个常用的 Linux
工具,大家都有必要掌握它,总结一下 crontab
的使用和需要注意的地方。
安装
在 centos7
下安装 crontab
工具。
# 确认是否已安装 帮助 -h
crontab -h
# 安装
yum -y install vixie-cron
yum -y install crontabs
# 开机运行
systemctl enable crond.service
# 操作 启动 | 停止 | 重启 | 查看状态
service crond start | stop | restart | status
配置使用
基本使用
使用 crontab -h
可以看到 crontab
的命令,常用的是:
-e 编辑当前用户crontab任务
-l 列出当前用户所有crontab任务
-r 删除当前用户所有crontab任务
-u 指定用户crontab任务
例如查看用户 www
的所有任务是:
sudo corntab -u www -l
指定用户运行定时程序
编辑用户 www
的定时任务:
sudo crontab -u www -e
这样编辑后的 crontab
定时任务就是指定 www
去运行的。
crontab命令编写
运行 cat /etc/crontab
就可以看到这个文件的执行逻辑以及下面的命令编写方法;
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# 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
# | | | | |
# * * * * * user-name command to be executed
详细解释一下:
crontab任务配置基本格式:
* * * * * command
第1列表示分钟0~59 每分钟用 * 或者 */1 表示
第2列表示小时0~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0,7都可表示星期天)
第6列要运行的命令或执行的脚本
星号(*):代表所有可能的值,每一个值都会执行;
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”;
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”;
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次;
操作示例
我需要指定 www
用户用 crontab
运行一个 Yii
的脚本:
运行编辑命令:
sudo crontab -u www -e
这里如果你是给当前用户指定定时任务,直接 crontab -e
就行了。
添加以下任务,然后保存退出:
*/5 * * * * php /opt/wwwroot/php/yii test/crontab >> /opt/wwwroot/php/runtime/logs/test.log 2>&1
每五分钟使用 php
程序运行 /opt/wwwroot/php/yii test/crontab
脚本,并将输出追加写到日志种;
查看 crontab
运行情况:
查看 /var/log/cron
即可看到 crontab
运行记录了,实时跟踪运行情况;
sudo tailf -n 100 /var/log/cron
输出:
Mar 5 13:50:11 myhost crontab[30684]: (root) REPLACE (www)
Mar 5 13:50:11 myhost crontab[30684]: (root) END EDIT (www)
Mar 5 13:51:01 myhost crond[30605]: (www) RELOAD (/var/spool/cron/www)
Mar 5 13:55:01 myhost CROND[1836]: (www) CMD (php /opt/wwwroot/php/yii test/crontab >> /opt/wwwroot/php/runtime/logs/test.log 2>&1)
Mar 5 14:00:02 myhost CROND[5024]: (www) CMD (php /opt/wwwroot/php/yii test/crontab >> /opt/wwwroot/php/runtime/logs/test.log 2>&1)
Mar 5 14:05:01 myhost CROND[8916]: (www) CMD (php /opt/wwwroot/php/yii test/crontab >> /opt/wwwroot/php/runtime/logs/test.log 2>&1)
可以看到, crontab
的运行日志里记录了编辑任务和重载任务以及运行任务的所有情况。
确认一下日志的写入:
cat /opt/wwwroot/php/runtime/logs/test.log
输出:
2020-03-05 13:55:01定时运行测试
2020-03-05 14:00:02定时运行测试
2020-03-05 14:05:01定时运行测试
至此,我们就学会了怎么使用在 Linux
下怎么使用 crontab
的基本姿势了。
Linux用得我好焦灼啊 🙂
应该是越用越舒服才对哦,哈哈