使用crontab你可以在指定的时间执行一个shell脚本或者一系列Linux命令。例如系统管理员安排一个备份任务使其每天都运行。
1.cron服务
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
service crond status //查看服务状态
2.用法
crontab [-u username] [-l|-e|-r]
选项与参数:
-u :只有 root 才能进行这个任务,亦即帮其他使用者创建/移除 crontab 工作排程;
-e :编辑 crontab 的工作内容
-l :查阅 crontab 的工作内容
-r :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑
省略-u username,则是以当前用户创建定时器
定时器里面的内容
# .---------------- 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
# | | | | |
# * * * * * username command to be executed
从左到右分别为:分 时 日 月 周 用户名 命令
3.例子
①每分钟都将日期打印到一个日志文件中
crontab -e 然后按下i,进入插入模式,输入下面的内容
*/1 * * * * date >> /tmp/date.log
然后按esc,进入正常模式,然后输入:进入命令模式,输入wq 保存并退出
crontab -l 查看当前用户的计划任务
然后输入tail -f /tmp/date.log动态的查看文件内容
②每两分钟执行一次
*/2 * * * * date >> /tmp/date.log
③每两小时执行一次
错误写法* */2 * * * date >> /tmp/date.log,因为每两小时的任何分钟都执行
正确写法 0 */2 * * * date >> /tmp/date.log 每两小时的零分执行,当然你也可以是每两小时的一分执行
④每天5点和17点执行任务
0 5,17 * * * date >> /tmp/date.log
多个时间点可以用逗号分隔,连续的点可以用中横线-来分隔,如5点到17点,可以写成0 5-17 * * *
⑤每隔30秒执行一次任务
因为计划任务的最小单位为1分钟,没办法通过上述方法来执行30秒的任务,但是可以通过sleep来实现。
* * * * * date >> /tmp/date.log
* * * * * sleep 30; date >> /tmp/date.log
从上面的例子中也可以看出,多个任务可以在一个计时任务中执行,之间用分号分隔就行
⑥每年执行一次任务
@yearly date >> /tmp/date.log
上面的写法等同于 0 0 1 1 * >> /tmp/date.log,会在每年的第一分钟内执行,这个可以发新年的问候
类似的写法还有
@reboot 一重启
@yearly 每年,等同于 “0 0 1 1 *”
@annually (等同于 @yearly)
@monthly 每月,等同于 “0 0 1 * *”
@weekly 每周, 等同于“0 0 * * 0”
@daily 每日,等同于 “0 0 * * *”
@midnight (等同于 @daily)
@hourly 每小时,等同于 “0 * * * *”