今天咱们学习了Linux系统的进程调度,进程调度是为了在将来某个时间点,让系统自动执行咱们事先编写好的命令或脚本的列表,从而使得即便用户不在计算机旁边也能够按时完成任务。这样有利于咱们更好的进行任务计划以及在须要执行任务的时候自动完成咱们设定好的命令,从而完成任务。bash
固然为了可以进行进程调度,就必需要有一种机制可以识别事件发生的时间而且可以运行用户所预期的命令;这种机制在Linux中是经过特定的守护进程来实现的。这类的进程有:ide
atd:将预先编写好的命令在将来某个时间点执行一次。工具
crond: 将预先编写好的命令在将来的符合条件的时间点重复执行。学习
咱们在进行任务调度时须要先查看守护进程是否运行,因此咱们来查看守护进程运行与否的命令以下:命令行
在Centos6中:
队列
]# service {atd|crond} status进程
结果为running或者"正在运行",都表示其正常工做事件
在Centos7中:crontab
]# systemctl status {atd.service|crond.service}it
结果为active(running)就表示其正常工做
全部的进程调度的结果都会以电子邮件的方式发送到用户的邮箱中。
本地电子邮件服务:
SMTP:Simple Mail Transfer Protocol,简单邮件传输协议,TCP/25
POP3:Post-Office Protocol Version 3,邮局协议第三版,TCP/110
IMAP4:Internet Mail Access Protocol Version 4,互联网邮件访问协议第四版,TCP/143
atd守护进程可以识别和完成由at命令、batch命令制做的任务计划;
at命令:
at, batch, atq, atrm - queue, examine or delete jobs for later execution
at [option] TIME
TIME:
1.HH:MM [YYYY-mm-dd]
2.noon, midnight, teatime
3.tomorrow
4.now+#UNIT UNIT:min, hours, days, weeks, months, years...
at定义的做业有队列的概念,一般队列使用单个字母来表示,默认是a;
at -q QUEUE_NAME TIME
选项:
-q QUEUE
-f FILE
-l:查看队列,至关于atq
-d JOB_ID:清除指定的计划做业,至关于atrm
-c:查看指定的做业的内容
batch命令:
batch命令在定义任务的时候,无需指定时间,是由系统自行选择在系统比较空闲的时候,完成此计划任务;其余的配置与at彻底相同;
下面就是周期性任务调度计划:cron
cronie软件包,提供crond守护进程以及cron的其余管理工具
cron任务一般分为两类: 系统cron任务:/etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details see man 4 crontabs # Example of job definition: # .---------------- 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 # | | | | | # * * * * * user-name command to be executed 注意: 1. * * * * *:定义周期执行任务的时间 user-name:运行此任务的用户帐户身份; command to be executed:应该执行的任务命令及命令行参数; 注意:为了保证任务可以准确执行,命令一般是用绝对路径填写; 2.各个字段之间使用一个或多个空白字符进行分隔; 3.任务运行的结果以邮件的方式直接发送给root用户; 用户cron任务:/var/spool/cron/USERNAME SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details see man 4 crontabs # Example of job definition: # .---------------- 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 to be executed 注意: 1. * * * * *:定义周期执行任务的时间 command to be executed:应该执行的任务命令及命令行参数; 注意:为了保证任务可以准确执行,命令一般是用绝对路径填写; 2.各个字段之间使用一个或多个空白字符进行分隔; 3.任务运行的结果以邮件的方式直接发送给发布任务的用户; 时间表示法: 1.特定时间:给定时间点的有效取值范围内的全部有效值; 0 5 3 9 * 2.通配符时间:*,表示"每..."之意,给定时间点的全部有效值; * * * * * 3.离散时间:在给定的时间点上,使用逗号分隔; 0 8,20 * * 1,3,5 4.连续时间:在给定的时间点上,使用减号分隔; 0 8 * * 1-5 5.步长时间:在给定的时间点上,使用除号分隔; */2 * * * * */7 * * * * 此种方式没法实现每7分钟为间隔执行计划任务; 注意: 1.指定的步长必须能被时间点的数值整除,不然,无心义; 2.最小的时间单位是分钟,若是计划以秒为执行计划任务的时间单位,必须借助于其余机制。