目录
Linux下有两种定时执行任务的方法:at命令和Contab服务
AT命令
- at [选项] 时间
- 选项:
– m:当at工作完成时,无论是否有命令输出,都通过email通知执行at命令的用户
–c 工作号:显示该at工作的实际内容
- 时间:
- HH:MM 02:30
- HH:MM YYYY-MM-DD 02:30 2016-10-04
- HH:MM[am|pm] [month] [date] 02:30 July 25
- HH:MM[am|pm] + [minutes|hours|days|weeks] now +5 minutes
- at now +2 minutes
- atq 查询系统中的定时任务
- atrm 工作号 删除指定的at任务
Crontab 服务
Crontab简介
- Crontab 是一个用于设置周期性被执行任务的工具
启动Crontab服务
- service crond start
安装cron
- yum install vixie-cron
- yum install crontabs
一个简单的例子
- 每分钟打印当前时间到一个日志文件中
# crontab -e
# */1 * * * * date >> /tmp/logo.txt
Crontab配置文件格式
* * * * * COMMAND
| | | | |--- 星期0~7(0或者7表示星期天)
| | | |----- 月份1~12
| | |------ 日期 1~31
| |-------- 小时0~23
|---------- 分钟0~59
例子
- 每晚的21:30重启apache
– 30 21 * * * service htttpd restart - 每月1、10、22日的4:45重启apache
– 45 4 1,10,22 * * service httpd restart - 每月1到10日的4:45重启apache
– 45 4 1-10 * * service httpd restart - 没个两分钟重启apache
– */2 * * * * service httpd restart
– 1-59/2 * * * * service httpd restart - 晚上11点到早上7点之间,每隔一小时重启apache
– 0 23-7/1 * * * service httpd restart - 每天18:00至23:00之间每隔30分钟重启apache
– 0,30 18-23 * * * service httpd restart
– 0-59/30 18-23 * * * service httpd restart
Crontab工具的使用
- 查看用户的计划任务:crontab -l
- 编辑当前用户的计划任务:crontab -e [-u] [用户名]
- 删除当前用户的计划任务:crontab -r
Crontab 配置文件
- 全局(系统)配置文件
– /etc/crontab - 用户配置文件
– /var/spool/cron/root - 日志文件
– /var/log/cron - 执行系统定时任务的方法
– 手动指定定时任务
– 系统定时任务 - 第一种是把需要定时执行的脚本复制到/etc/cron.{daily,weekly,monthly}目录里面的任意一个
- 第二种是修改/etc/crontab配置文件
Crontab 常见错误
- 环境变量:Crontab不识别.bash_profile里面定义的环境变量
- 第三个和第五个之间指定的是“或”操作
– 四月的第一个星期日早晨1时59分运行a.sh
– 59 1 1-7 4 * test `data + \%w` -eq 0 && /root/a.sh
Crontab 半分钟执行一次
- 结合sleep命令
– * * * * * sleep 30s; 命令
anacron