开笔
最近在做数据收集涉及到一些日志文件轮转切割,笔者想用一个定时任务来实现定时轮转。调研后决定使用 Linux 系统的 cron 服务。
Cron 是Uninx系(Linux) 操作系统的后台驻留程序,系统管理员用得相对多一些。Cron 可以被设置为开机启动,在 centos 中默认就是开机启动的服务。
在使用 cron 服务的时候,往往我们都需要 先确认cron服务本身是否开启,处于运行状态,确认当前用户是否有权限正常使用cron,编辑下发cron计划任务,确认我们的计划任务是否如约按照计划执行。本篇笔者就和大家一起看看:
- 查看当前系统cron服务状态
- 管理 cron 服务
- 配置 corn 服务权限
- 编辑下发 cron 计划任务
- 查看 任务是否按照计划执行
cron服务查看
除了可以用 ps 命令查看 cron 服务进程运行状态,还可以查看正在运行的cron服务调度本身的状态。通过 crontab 命令对cron服务的设置。用:
man crontab
查看一下crontab命令,发现,crontab 有4个可选参数:
- -u:设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
- -l:列出某个用户cron服务的详细内容
- -r:删除某个用户的cron服务
- -e:编辑某个用户的cron服务
cron服务管理
如果经过查看,我们发现cron并不是你要的状态,那么就开始管理它吧。作为后台服务,cron有着与我们熟知的服务程序相似地基本管理命令:启动、停止、重启、重新载入配置(需要稍微注意一点,这里是crond 而不是 cron):
-
启动服务:
/sbin/service crond star
-
关闭服务
/sbin/service crond stop
-
重启服务
/sbin/service crond restart
-
重新载入配置
在每一次重新修改过cron配置文件,请务必重新载入一下配置:
/sbin/service crond reload
配置 corn 服务权限
在 Linux 操作系统中,对用户使用cron服务的权限控制在 /etc/cron.allow 和 /etc/cron.deny 两个文件中配置实现,但 /etc/cron.allow 文件非必须存在的。
如果 /etc/cron.allow 文件存在,则所有需要运行 crontab 命令的用户必须在这个文件被列举出来;如果 /etc/cron.allow 文件不存在,但
/etc/cron.deny 文件存在,则所有需要运行 crontab 命令的用户必须在这个文件不被列举出来。当这两个文件都不存在的情况下,在一些 Linux 系统(如 Ubuntu、Debian ,但不是所有)允许所有用户运行 crontab 命令。
需要注意的是,系统中,不在 /etc/shadow 文件所列的用户,是没有权限使用 crontab 命令。
编辑cron任务
-
语法
* * * * * Command_to_execute - – – – - | | | | | | | | | +—– Day of week (0–6) (Sunday=0) or Sun, Mon, Tue,… | | | +———- Month (1–12) or Jan, Feb,… | | +————-— Day of month (1–31) | +——————– Hour (0–23) +————————- Minute (0–59)
-
示例
每天凌晨轮转nginx的access日志
01 00 * * * /usr/sbin/logrotate /etc/logrotate.d/nginx-access-log.conf
系统便会在每天凌晨壹分的时刻执行
/usr/sbin/logrotate /etc/logrotate.d/nginx-access-log.conf
命令,实际就是每天凌晨进行日志轮转