介绍
程序员对于定时执行任务一定不陌生,很多任务为了减少对用户的干扰,如系统更新、维护、数据库结构变更等,通常会选择在凌晨进行。对于一些简单的无需人工照看的任务,就可以预先写好命令,并设定时间自动运行,然后就可以安心睡大觉了。
其他情况还有,可以预计的将来要做的操作,为了防止遗忘,先写好命令脚本,然后设置自动运行,就可以把这事从你的日程表里划掉啦。
下面进入正题。
一、at
1. 常用命令
基本用法:at [参数] [时间]
控制台读入任务完毕,ctrl+d结束。
参数 | 说明 |
---|---|
at -l 或 atq | 查看当前任务 |
at -d [任务id]或atrm | 删除定时任务 |
at -c [任务id] | 打印任务内容 |
at -f [文件] | 从指定文件读入任务,而不是从控制台 |
2. 用法
时间的指定非常灵活,下面列举常用几种:
at 04:00
at 04pm
at noon
at now + 3min/minutes/hours/days/weeks
at 04pm + 20min
at today/tomorrow
at 7:30pm 2017-09-26
二、cron
定时任务命令crontab = chronos + table。chronos来源于希腊语,原意是时间
1. 常用命令
命令 | 说明 |
---|---|
crontab -e | 编辑定时任务,可以增加或删除。推荐 |
crontab -l | 列出当前用户的定时任务 |
crontab -r | 删除当前用户的定时任务 |
crontab [test.cron] | 用test.cron(自己定义)覆盖定时任务文件 (不推荐) |
2. 配置说明
crontab -e的默认文件,对配置有了初步的说明,基本够用。下面通过示例形象说明:
指令 | 功能 |
---|---|
*/2 * * * * echo 'holy shit' >> test.txt | 每两分钟执行一次 |
20-40/2 * * * * echo 'holy shit' >> test.txt | 20到40分钟,每两分钟执行一次 |
20-40/2, 50 * * * * echo 'holy shit' >> test.txt | 20到40分钟,每两分钟执行一次,第50分钟也执行一次 |
0 3-5 * * * echo 'holy shit' >> test.txt | 每天的3到5小时开始时执行一次 |
0 3-5 3,5,6 * * echo 'holy shit' >> test.txt | 每月3、5、6号的3到5点开始时执行一次 |
3. 日志地址
一般情况下,crontab日志在/var/log/cron.log.
如果没有,那么就在/var/log/syslog,可通过下面命令查看cron日志:
grep cron /var/log/syslog
修改日志位置:
sudo vi /etc/rsyslog.d/50-default.conf
#找到下面的line
#cron.* /var/log/cron.log
#去掉注释
sudo systemctl restart rsyslog
#查看启动状态
sudo systemctl status rsyslog