Linux之定时任务crontab使用详解

在开发或者运维时,有很多任务是需要定时来完成的,日志切割,数据库定期备份,设备状态确认等等,在 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之定时任务crontab使用详解

原文链接:https://beltxman.com/3083.html

若无特殊说明本站内容为 行星带 原创,未经同意请勿转载。

Linux之定时任务crontab使用详解”上有 2 条评论;

发表评论

您的电子邮箱地址不会被公开。

Scroll to top