1、单一例行工作--at
1.1、at命令工作过程
-
/etc/at.allow,写可以使用at的名单--白名单
-
/etc/at.deny,黑名单
-
如果两个文件都不存在,只有root有权限使用
#at工作调度对应的系统服务
[root@localhost ~]# ps -ef | grep at
[root@localhost ~]# systemctl status atd
#at的工作文件存放目录
[root@localhost ~]# ll /var/spool/at
#at工作的日志文件
[root@localhost ~]# ll /var/log/cron
1.2 at命令详解
at 在指定时间执行命令。
atq 列出用户的待处理作业,除非该用户是超级用户;在这种情况下,每个人的工作都被列出了。输出行(每个作业一个)的格式是:作业号、日期、小时、队列和用户名。
atrm 删除由作业编号标识的作业。
batch 在系统负载允许的情况下执行命令;换句话说,当平均负载低于0.8时,或者低于调用atd时指定的值。
命令格式:at [参数] [时间]
参数:
-m 当任务完成之后,即使没有标准输出,将给用户发送邮件
-l atq的别名,可列出目前系统上面的所有该用户的at调度
-d atrm的别名,可以取消一个在at调度中的工作
-v 使用较明显的时间格式,列出at调度中的任务列表
-c 可以列出后面接的该项工作的实际命令内容(脚本)
-f 从文件中读取作作业
时间格式:
HH:MM 在今天的HH小时MM分钟执行,如果今天的这个时间点已经过了,则明
天执行
HH:MM YYYY-MM-DD 强制规定在某年某月的某一天的特殊时刻进行该工作 MMDDYY
now + 2 minutes 从现在开始几分钟minutes, hours, days, or weeks
2、循环执行的例行工作crond(每隔一定周期就需要执行一次)
2.1、crontab的工作过程
-
/etc/cron.allow,白名单
-
/etc/cron.deny,黑名单
-
两个文件不存在,只有root能用
#crontab工作调度对应的系统服务
[root@localhost ~]# systemctl status crond
#crontab工作的日志文件
[root@localhost ~]# ll /var/log/cron
#用户定义计划任务的文件所在目录
[root@localhost ~]# ll /var/spool/cron/
2.2 crontab命令详解
[root@localhost ~]# crontab --help
crontab: invalid option -- '-'
crontab: usage error: unrecognized option
Usage:crontab [options] filecrontab [options]crontab -n [hostname]Options:-u <user> define user-e edit user's crontab-l list user's crontab-r delete user's crontab (清空)-i prompt before deleting-n <host> set host in cluster to run users' crontabs-c get host in cluster to run users' crontabs-s selinux context-V print version and exit-x <mask> enable debugging
crontab计划任务格式:
分 | 时 | 日 | 月 | 周 |
0-59 | 0-23 | 1-31 | 1-12 | 0-7 |
区别:date 月日时分年.秒
用法:date [选项]... [+格式]
给定的格式FORMAT 控制着输出,解释序列如下:%% 一个文字的 %%a 当前locale 的星期名缩写(例如: 日,代表星期日)%A 当前locale 的星期名全称 (如:星期日)%b 当前locale 的月名缩写 (如:一,代表一月)%B 当前locale 的月名全称 (如:一月)%c 当前locale 的日期和时间 (如:2005年3月3日 星期四 23:05:25)%C 世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20)%d 按月计的日期(例如:01)%D 按月计的日期;等于%m/%d/%y%e 按月计的日期,添加空格,等于%_d%F 完整日期格式,等价于 %+4Y-%m-%d%g ISO-8601 格式年份的最后两位(参见 %G)%G ISO-8601 格式年份(参见 %V),一般只和 %V 结合使用%h 等于%b%H 小时(00-23)%I 小时(00-12)%j 按年计的日期(001-366)%k 小时,空格补充空白位( 0..23);与 %_H 相同%l 小时,空格补充空白位( 1..12);与 %_I 相同%m 月份(01..12)%M 分钟(00..59)%n 换行%N 纳秒(000000000..999999999)%p 当前地区时间设置中 AM 或 PM 的等效值(“上午”或“下午”),未知则为空%P 类似 %p,但使用小写%q 一年中的季度(1..4)%r 当前地区时间中十二小时制钟表时间(例如,下午 11时11分04秒)%R 24 小时制的时间和分钟;和 %H:%M 相同%s 1970-01-01 00:00:00 UTC 以来的秒数%S 秒(00-60)%t 输出制表符 Tab%T 时间,等于%H:%M:%S%u 星期,1 代表星期一%U 一年中的第几周,以周日为每星期第一天(00-53)%V ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53)%w 一星期中的第几日(0-6),0 代表周一%W 一年中的第几周,以周一为每星期第一天(00-53)%x 当前locale 下的日期描述 (如:12/31/99)%X 当前locale 下的时间描述 (如:23:13:48)%y 年份最后两位数位 (00-99)%Y 年份%z +hhmm 数字时区(例如,-0400)%:z +hh:mm 数字时区(例如,-04:00)%::z +hh:mm:ss 数字时区(例如,-04:00:00)%:::z 数字时区带有必要的精度 (例如,-04,+05:30)%Z 按字母表排序的时区缩写 (例如,EDT)
crontab计划任务的时间格式中的特殊符号:
特殊字符 | 含义 |
---|---|
* | 代表任何时刻 |
, | 代表分隔时段 |
- 0-59 | 代表一段时间范围 |
/数字 | 指定时间的间隔频率,例如每 3 分钟进行一次,*/3 |
注:%在crontab里面有特殊含义,如果有命令里面需要使用%,需要使用\转义。
#每天早上9点整说good morning
[root@server ~]# crontab -e
0 9 * * * wall "good morning"
注:wall命令用于向系统当前所有打开的终端上输出信息。 通过wall命令可将信息发送给每位同意接收公众信息的终端机用户,若不给予其信息内容,则wall命令会从标准输入设备读取数据,然后再把所得到的数据传送给所有终端机用户。
2.3 系统的计划任务(对系统所有用户都生效的任务文件)
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root# 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
当需要同一时间执行多个脚本时,可以将这多个脚本放在一个目录下,然后使用run-parts来执行。
run-parts:该命令可将后面接的“目录”内的所有文件找出来执行。