Linux下的任务调度 Cron
Linux下的任务调度分为两类:系统任务调度和用户任务调度
系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在 /etc
目录下有一个 crontab
文件,这个就是系统任务调度的配置文件。
系统任务调度存放的目录
- /etc/cron.hourly 小时
- /etc/cron.daily 每天
- /etc/cron.weekly 每周
- /etc/cron.monthly 每月
用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。
/etc/cron.deny
该文件中配置用户不允许使用 crontab
命令,亲测 Ubuntu16.04
默认不存在,CentOS7.2
存在,如果要禁止某个用户不能使用 crontab
,在此文件写入用户名即可,仅对普通用户生效,root
用户无效。
/etc/cron.allow
该文件中配置用户允许使用 crontab
命令,亲测 Ubuntu16.04
、CentOS7.2
默认不存在。
系统读取顺序为先读取 /etc/cron.deny 文件,再读取 /etc/cron.allow 文件,建议保留任意一个文件即可,内容为一个用户名称一行。
/var/spool/cron/
所有用户 crontab
文件存放的目录,以用户名命名,CentOS
系统。
1 | crontab -l #显示定时任务列表 |
crontab 文件内容说明
1 | Minute Hour Day Month Week command |
例子
1 | */1 * * * * ~/http.sh #每1分钟执行一次 ~/http.sh shell 文件 |
crontab
文件里面指定的命令建议写绝对路径,文件相对路径和绝对路径都可以。run-parts
可以指定任意目录执行,路径可以为相对路径也可以为绝对路径, CentOS
系统该命令位置 /usr/bin/run-parts
,Ubuntu
系统该命令位置 /bin/run-parts
。
crontab 日志
CentOS7.2 crontab 日志路径为 /var/log/cron
CentOS 系统 crontab 执行成功日志会出现以下内容
1 | May 5 11:48:01 10-13-41-254 CROND[10770]: (nick) CMD (run-parts /home/nick/sh) |
Ubuntu16.04 crontab 日志路径为 /var/log/cron.log
Ubuntu16.04 默认不生成 crontab 日志,需要更改配置,方法如下
1 | sudo vim /etc/rsyslog.d/50-default.conf |
Ubuntu 系统 crontab 执行成功日志会出现以下内容
1 | May 5 11:37:01 localhost CRON[26565]: (root) CMD (/root/sh/1.sh) |