第13章 计划任务
2018-04-17 本文已影响10人
fe8478c7ba2a
简介
作用: 计划任务主要是做一些周期性的任务,目前最主要的用途是定期备份数据
Schedule one-time tasks with at. 一次性调度执行 at
Schedule recurring jobs with cron. 循环调度执行 cron
Schedule recurring system jobs.
所有计划任务执行中的输出都会以邮件的方式发送给指定用户, 除非重定向
一次性调度执行 at
程序安装
在系统光盘中。
rpm -ivh at.x86_64 //安装
systemctl start atd //启动
systemctl status atd //查看
Active: active (running) //运行。inactive是不活跃就是没有运行。
语法格式
语法格式:
at <TIMESPEC>
now +5min
teatime tomorrow (teatime is 16:00)
noon +4 days
5pm august 3 2018
at命令格式
at HH:MM YYYY-MM-DD //HH(小时):MM(分钟) YYYY(年)-MM(月份)-DD(日)
例:at 4:00 2017-11-27
HH[am pm]+D(天) days //HH(小时)[am(上午)pm(下午)]+days(天)
例:4pm + 3days :3天以后下午4:00执行at命令设定的计划任务。
例1
初识一次性任务计划
例1:
[root@localhost ~]# at now +1min
at> useradd uuuu
at> <EOT> //CTRL+D提交任务
job 1 at Sat Mar 21 22:34:00 2015
[root@localhost ~]# atq
3 Thu Mar 30 09:55:00 2017 a root
稍等片刻。1分钟后。
[root@localhost ~]# id uuuu
例2
通过重定向,一次性导入多个任务
例2:
[root@localhost ~]# vim at.jobs
useradd u99
useradd u00
touch /`date +%F`.txt
[root@localhost ~]# at now +1min < at.jobs
注: sudo执行需要考虑tty问题
循环调度执行 cron
简介
crond的概念和crontab是不可分割的。crontab是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语chronos(χρόνος),原意是时间。而crond正是它的守护进程。
查看进程状态
[root@tianyun ~]# systemctl status crond.service
[root@tianyun ~]# ps aux |grep crond
root 550 0.0 0.0 126300 1648 ? Ss 10:05 0:00 /usr/sbin/crond -n
用户级
计划任务存储位置:
[root@localhost ~]# ls /var/spool/cron/
管理方式:
创建计划
crontab -e Edit jobs for the current user.
查询计划
crontab -l List the jobs for the current user.
管理员可以使用 -u username, 去管理其他用户的计划任务
删除计划
crontab -r Remove all jobs for the current users.
高级管理
拒绝用户执行任务计划。
1.在拒绝文件中添加用户名
/etc/cron.deny:
alice
jack
2.通过该用户创建计划任务
[alice@localhost ~]$ crontab -e //提示拒绝用户执行。
You (alice) are not allowed to use this program (crontab)
See crontab(1) for more information
语法格式 Job format
# .---------------- 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
# | | | | |
# * * * * * command
示例1
*/5 * * * * /mysql_back.sh
0 2 1,4,6 * * /mysql_back.sh
0 2 5-9 * * /mysql_back.sh
* * * * * /mysql_back.sh
0 * * * * /mysql_back.sh
* * 2 * * /mysql_back.sh
0 2 * * * /mysql_back.sh
0 2 14 * * /mysql_back.sh
0 2 14 2 * /mysql_back.sh
0 2 * * 5 /mysql_back.sh //不写月日,仅周生效
0 2 * 6 5 /mysql_back.sh
0 2 2 * 5 /mysql_back.sh
0 2 2 6 5 /mysql_back.sh //书写月和日,月或日,月日周均生效
示例2
00 02 * * * ls //每天2:00整
00 02 1 * * ls //每月1号2:00整
00 02 14 2 * ls //每年2月14号2:00整
00 02 * * 7 ls //每周日2:00整
00 02 * 6 5 ls //每年6月的周五2:00整 (特殊)
00 02 14 * 7 ls //每月14号2:00整 或者 每周日2:00整,这两个时间都执行
00 02 14 2 7 ls //每年2月14号2:00整 或者 每周日2:00整,这两个时间都执行
00 02 * * * ls //每天2:00整
* 02 * * * ls //每天2:00中的每一分钟
* * * * * ls //每分钟执行ls
* * 14 2 * ls //2月14号的每分钟 1440分钟
*/5 * * * * ls //每隔5分钟
00 02 1,5,8 * * ls //每月1,5,8号的2:00整
00 02 1-8 * * ls //每月1到8号的2:00整
系统级
简介
系统级任务计划作用:
1.临时文件的清理 /tmp /var/tmp
2.系统信息的采集 sar
3.日志的轮转logrotate
4.通常不是由用户定义
定义位置一
定义位置一:在这里可以定义系统的循环的任务计划。
[root@localhost ~]# vim /etc/crontab //该文件中默认没有定义任何计划任务
* * * * * user-name command to be executed
定义位置二(anacron)
简介
以天为单位或者是在启动后立刻进行 anacron 的动作,侦测停机期间应该进行但是并没有进行的 crontab 任务,并运行一遍后自动停止。
运行周期
时,天,周,月
工作原理
anacron 会以一小时,一天、七天、一个月为期去侦测系统未进行的 crontab 任务,因此对于某些特殊的使用环境(关机未执行)非常有帮助。
举例说明
周末关机了。周一早上开机,anacron就会检查一下没有执行的任务计划,然后关闭。
示例
1.找到主程序:/etc/cron.d/
定义位置二:与位置1(crontab)功能相同。但这里是另一个循环程序:anacron程序
2.主程序所调动的程序:/etc/cron.d/0hourly/
3.主程序所调动的程序是anacron:/etc/cron.hourly/0anacron
4.调动了anacron程序
5.anacron程序的机制
6.观察日志
如果没有时间戳,可以通过命令立刻触发该程序更新。
anacron -u
7.观察的任务计划汇总日志
[root@localhost ~]# tail /var/log/cron
2017-10-23
Oct 23 10:08:08 localhost anacron[15881]: Job `cron.daily' locked by another anacron - skipping
Oct 23 10:08:08 localhost anacron[15881]: Will run job `cron.weekly' in 59 min.
Oct 23 10:08:08 localhost anacron[15881]: Will run job `cron.monthly' in 79 min.
Oct 24 10:05:36 localhost anacron[15983]: Updated timestamp for job `cron.daily' to 2017-10-24
Oct 24 10:05:36 localhost anacron[15983]: Updated timestamp for job `cron.weekly' to 2017-10-24
Oct 24 10:05:36 localhost anacron[15983]: Updated timestamp for job `cron.monthly' to 2017-10-24
通过强制执行的命令,可以立刻出发该程序。
anacron -f
8.总结
anacron程序是挽救系统中未及时完成的任务。用户一般不需要使用。
注释.anacron程序解析
[root@localhost ~]# anacron [-sfn] [job]..
[root@localhost ~]# anacron -u [job]..
选项与参数:
-s :开始一连续的运行各项工作 (job),会依据时间记录档的数据判断是否进行;
-f :强制进行,而不去判断时间记录档的时间戳记;
-n :立刻进行未进行的任务,而不延迟 (delay) 等待时间;
-u :仅升级时间记录档的时间戳记,不进行任何工作。
job :由 /etc/anacrontab 定义的各项工作名称。