Linux计划任务
十四.计划任务
计划任务顾名思义,就是周期性的执行一些任务命令,目前最主要的用途是定期备份数据。
1. at
at 命令被用来在指定时间内调度一次性的任务。 使用格式为at [-mldv] TIME
at 适合仅执行一次就结束的调度命令,需要启动一个后端的atd服务。
[[email protected] d2]# systemctl start atd ---当前启动
[[email protected] d2]# systemctl enable atd ---开机自启动
选项与参数:
- -m :当at的任务完成后,即使没有输出信息,也以 email 通知给使用者
- -l :列出目前系统上面的所有该使用者的at任务(同atq)
- -d :可以取消一个在 at 任务(同atrm)
- -v :可以使用较明显的时间格式列出 at 任务
- -c :可以列出后面接的该项任务的内容
at命令的时间格式:
- now + 时间 :时间以 minutes、hours、days、或 weeks 为单位
- HH:MM :24小时制度,如果时间已过,就会在第二天的这一时间执行
- midnight :表示00:00
- noon :表示12:00
- teatime :表示16:00
示例1:
[[email protected] d2]# at 13:10 //定义一个at任务在13:10执行
at> date >> /tmp/at //将当前时间输入/tmp/at文件
at> echo "at command test" >> /tmp/at
at> uname -r >> /tmp/at
at> <EOT> //另选一行按Ctrl+D退出at命令模式
job 1 at 2018-03-28 13:10
示例1:
[[email protected] d2]# at now + 5 minutes //再定义一个at任务在5分钟后执行
at> date >> /tmp/at
at> echo "at command test again" >> /tmp/at
at> sleep 10
at> date >> /tmp/at
at> <EOT>
job 2 at 2018-03-28 13:10
2. batch
batch 命令被用来在系统平均负载达到 0.8% 以下时执行一次性的任务,用法与at一样
[[email protected] d2]# batch midnight //在00:00之后系统平均负载达到0.8%以下的时候执行
at> sync
at> sync
at> shutdown -h now
at>
job 3 at 2018-04-02 13:20
显示
[[email protected] d2]# atq
3 2018-04-02 13:20 b root
删除
[[email protected] d2]# atrm 3 //取消batch任务
3. cron
查看系统crond服务有无开启,没有的话请先开启:systemctl status crond
crond进程每分钟检查一次,以运行相应的任务,crond日志文件/var/log/cron
使用命令为 crontab,使用格式为crontab [选项] hostname
查看/etc/crontab文件可以查看编辑格式,这个文件也是系统级计划任务,我们一般只做用户级计划任务 .
编写完成的可以计划任务以文件形式存放在 /var/spool/cron/username文件中。
- -u :用户
- -e :编辑
- -l :列出
- -r :删除
Crontab命令的书写格式:
书写注意点:
1.系统级计划任务-查看:
[[email protected] d2]# vim /etc/crontab
* * * * * root ls
0 * * * * root ls
0 2 * * * root ls
0 2 1 * * root /mysql_back.sh
0 2 1 3 * jack run-parts /cron-test
[[email protected] d2]# crontab -e //创建计划任务
* * * * * /bin/ls
[[email protected] d2]# crontab -l //查看计划任务
* * * * * /bin/ls
[[email protected] d2]#ls /var/spool/cron/
root
[[email protected] d2]# cat /var/spool/cron/root
* * * * * /bin/ls
[[email protected] d2]# tail /var/log/cron //查看日志
[[email protected] d2]# crontab -u alice -e
[[email protected] d2]# crontab -r //清除所有计划任务
这里推荐一种熟练以后的简单做法,使用重定向
[[email protected] d2]# cat >> /var/spool/cron/username << EOF
> #注释
> 30 21 * * * 命令
> EOF
例子:
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重启lighttpd 。
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启lighttpd 。
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重启lighttpd 。
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启lighttpd 。
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重启lighttpd 。
* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小时重启lighttpd
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启lighttpd
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启lighttpd
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启lighttpd
4.anacron
anacron只是cron的补充而非是完全替代 cron
cron 是作为守护进程运行的,而anacron则作为普通进程运行并终止的。anacron 维护了一组应当运行的任务,每个任务都一个相关的运行间隔。anacron 并不能指定何时运行某项任务, 而是以天为单位或者是在启动后立刻进行 anacron 的动作,当系统启动之后anacrod将会去侦测停机期间应该进行但是并没有进行的 crontab 任务,并将该任务运行一遍后,然后 anacron 就会自动停止了。
因此 anacron 运行的时间通常有两个,一个是系统启动期间运行,一个是写入 crontab 中的任务。
[[email protected] d2]# cat /etc/anacrontab
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#天数 延迟时间 任务名称定义 执行的指令
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
#由 /etc/anacrontab 分析到 cron.daily 这项工作名称的天数为 1 天;
#由 /var/spool/anacron/cron.daily 取出最近一次运行 anacron 的时间戳记;
#由时间戳与目前的时间比较,若间隔天数为 1 天(以上),将延迟5分钟后执行"nice run-parts /etc/cron.daily"这条命令,且运行完毕后anacron程序结束
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
4.1. anacron命令方法
anacron 任务被列在 /etc/anacrontab 中,任务可以使用下面的格式(anacron 文件中的注释必须以 # 号开始)安排。
#period delay job-identifier command
1.1 : period - 这是任务的频率,以天来指定,或者是
@daily 、@weekly、@monthly 代表每天、每周、每月一次。
你也可以使用数字:1 - 每天、7 - 每周、30- 每月,或者N - 几天。
1.2: delay - 这是在执行一个任务前等待的分钟数。
1.3: job-id - 这是写在日志文件中任务的独特名字。
1.4: command - 这是要执行的命令或 shell 脚本。
4.2. 如何看示列文件
要浏览示例文件,输入:
[[email protected] d2]# ls -l /var/spool/anacron/
total 12
-rw------- 1 root root 9 Jun 1 10:25 cron.daily
-rw------- 1 root root 9 May 27 11:01 cron.monthly
-rw------- 1 root root 9 May 30 10:28 cron.weekly
anacron 会检查任务是否已经在 period 字段指定的时间被被执行了。如果没有,则在等待 delay 字段中指定的分钟数后,执行 command字段中指定的命令。
一旦任务被执行了,它会使用 job-id (时间戳文件名)字段中指定的名称将日期记录在 /var/spool/anacron 目录中的时间戳文件中。