任务计划
每个人或多或少都会有预先规划好的事情和临时约会等这样的事情发生,而这两件事情的的发生都是在未来的时间才能执行。
Linux任务计划、周期性任务执行
at :是在未来的某时间点执行一次任务,
不过我们的 CentOS 预设是启动的!而at命令需要依赖于atd这个服务才能执行。
启动atd服务:
CentOS 6:service atd start
service atd status
CentOS 7:systemctl start atd.service
systemctl status atd
常用选项:
- -V 显示版本信息:
- -l: 列出指定队列中等待运行的作业;相当于atq
* -d: 删除指定的作业;相当于atrm 相当于把/etc/spool/at/中的文件给删了 - -c #: 查看具体作业任务
- -f /path/from/somefile:从指定的文件中读取任务
- -m:当任务被完成之后,将给用户发送邮件,即使没有标准输出
注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户,这也间接的告诉我们,这会产生许多垃圾邮件。
at队列存放在/var/spool/at目录中
TIME:定义出什么时候进行 at 这项任务的时间
HH:MM [YYYY-mm-dd]
noon, midnight, teatime(4pm)
tomorrow
now + #{minutes,hours,days, OR weeks}
at now + 15minutes 未来15分钟
**执行方式:**
1)交互式 2)输入重定向 3)at –f 文件
/etc/at.{allow,deny}控制用户是否能执行at任务
白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令
黑名单:/etc/at.deny 默认存在,拒绝该文件中用户执行at命令,而没有在 at.deny 文件中的使用者则可执行。前提是没有白名单。
- 如果白名单存在,不在白名单的用户不能执行at命令
- 如果两个文件都不存在,只有 root 可以执行 at 命令
- 同一个用户,两个文件都有,白名单生效
at的工作方式
我们使用at这个命令,来输入需要工作的指令。at将这些指令以文本的方式写入/var/spool/at/这个目录中。
而这个作业等待着atd这个服务 来运行。
周期性任务计划cron
crontab :crontab 这个指令所设定的工作将会循环的一直进行下去! 可循环的时间为分钟、小时、每周、
每月或每年等。crontab 除了可以使用指令执行外,亦可编辑 /etc/crontab 来支持。 至于让 crontab 可以生
效的服务则是 crond 这个服务喔!
周期性运行某任务
cron
相关的程序包:
cronie: 主程序包,提供crond守护进程及相关辅助工具
cronie-anacron:cronie的补充程序,用于监控cronie任务执行状况,如 cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启 动一次此任务
crontabs:包含CentOS提供系统维护任务
确保crond守护处于运行状态:
CentOS 7:systemvyl restart crond.service
systemctl status crond
CentOS 6:service crond start
service crond status
在 Linux 底下的 crontab 会自动的帮我们每分钟重新读取一次 /etc/crontab 的例行工
作事项,但是????些原因或者是其他的 Unix 系统中,由于 crontab 是读到内存当中的,所以在你修改完 /etc/crontab
之后,可能并不会马上执行, 这个时候请重新启动 crond 这个服务吧!『systemctl restart crond』
我们来看一下这个 /etc/crontab 的内容吧!
[[email protected] ~]# cat /etc/crontab
SHELL=/bin/bash <======使用哪种shell接口
PATH=/sbin:/bin:/usr/sbin:/usr/bin <=====执行文件的搜索路径
MAILTO=root <=====若有额外STDOUT和STDEER,以 email 将数据送给谁
# 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) 特定值
给定时间点有效取值范围内的值
(2) *
给定时间点上有效取值范围内的所有值
表示“每...”
(3) 离散取值
#,#,#
(4) 连续取值
#-#
(5) 在指定时间范围上,定义步长
/#: #即为步长
时间格式
@reboot Run once after reboot
@yearly 0 0 1 1 *
@annually 0 0 1 1 *
@monthly 0 0 1 * *
@weekly 0 0 * * 0
@daily 0 0 * * *
@hourly 0 * * * *
用户计划任务
crontab命令定义
每个用户都有专用的cron任务文件: /var/spool/cron/USERNAME
crontab命令:
-
crontab [-u user] [-l | -r | -e] [-i]
- -l: 列出所有任务
- -e: 编辑任务
- -r: 移除所有任务
- -i:同-r一同使用,以交互式模式移除指定任务
- -u user: 仅root可运行,指定用户管理cron任务
控制用户执行计划任务:
/etc/cron.{allow,deny}
> 计划任务的黑名单只是禁止用户创建新的计划任务,旧的计划任务将继续执行。
sleep命令:
sleep NUMBER[SUFFIX]...
SUFFIX:
s: 秒, 默认
m: 分
h: 小时
d: 天
sleep 秒
usleep 微秒
上一篇: lintcode