1. 系统延迟命令at
1-1. at的简单理解
- at命令必须在atd服务开启的情况下执行,rhel7默认atd服务为开启状态;
- at命令必须指定任务运行的时间,但执行一次且不能精确到秒。
- at命令执行后可以安全注销 ,因为该任务会在与 shell会话断开连接的情况下运行;
1-2. at运作方式
使用 at 这个命令来产生所要执行的任务,并将这个任务以文本文件的方式写入 /var/spool/at/目录内,该任务便能等待 atd 这个服务的取用与执行了。
1-3. at的管理
at命令用法
at 11:03 若该时间点未超过,今天执行任务;若超过,明天执行
at now+2min 该时间点再过2min执行,min还可以替换成hours,days,weeks
at 4pm +3 days 三天后的下午4点执行任务
at 10am Jul 31 7月31号早上10点执行任务
at 1am tomorrow 明天早上1点执行任务
at midnight 00:00执行at的参数详解:
-m 当 at任务完成后,即使没有输出讯息,也以邮件方式通知已完成
-l 同atq命令,显示该用户所有的at任务
-d 同atrm命令,取消某个at任务
-v 使用较明显的时间格式
-c 可以列出后面任务的实际命令内容时间格式列举:具体信息请查看man at
- HH:MM
- MMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YY or [CC]YY-MM-DD
- minutes, hours, days, or weeks
- midnight(00:00), noon(12:12),or teatime(16:00)
- pm,am
注意:at命令行后,按Enter继续键入任务命令(可由多个命令组成),按 Ctrl+d完成计划任务,文件名用绝对路径。
[root@at-host ~]# at now+2min
at> touch /mnt/fle{1..10}
at> <EOT>
job 10 at Tue Oct 11 11:34:00 2016
[root@at-host ~]# at -v 11:18
Wed Oct 12 11:18:00 2016
at> echo hello
at> <EOT>
job 26 at Wed Oct 12 11:18:00 2016
[root@at-host ~]# at -c 26
#!/bin/sh <==通过bash shell执行
# atrun uid=0 gid=0
# mail kiosk 0
......省略部分输出
cd /root || { <==可以看出,会到下达at时的家目录去执行
echo 'Execution directory inaccessible' >&2
exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER090e6f4a'
echo hello <==真正的任务命令
marcinDELIMITER090e6f4a
1-4. at命令使用者的设定
vim /etc/at.deny
用户黑名单,默认存在于系统中,在此列表中出现的用户被禁止vim /etc/at.allow
用户白名单,默认不存在于系统中,但当此文件存在时,deny文件失效;所有普通用户执行at的权利被禁止,只有在此列表中出现的用户允许执行at命令
2. 管理定期任务
2-1. crontab运作方式
使用 acrontab 这个命令来产生所要执行的任务,并将这个任务以文本文件的方式写入 /var/spool/cron/目录内,该任务便能等待crond 这个服务的取用与执行了。
2-2. crontab命令
-u 仅root可使用该参数,指定用户,实现对其他用户工作任务的增删改
-l 查看crontab的任务内容
-r 移除所有的crontab任务内容
-e 编辑crontab任务内容
2-3. crontab编辑格式
- 格式:分钟 小时 日期 月 星期 命令
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,2代表或者2)
-
从什么到什么(1-5代表从1到5)
n/
每隔n单位间隔实例练习
05 * * * * 每小时整点过5分钟
05 02 * * * 每天02:05am
30 08 01 * * 每月的第一天8:30pm
/5 * * * 每5分钟
/10 9-17 1,15 * 每月的第一天和第15天9:00am-17:00pm每隔10分钟运行
0 0 1 jan 0 1月1日午夜和1月的每个星期天(注意:周与日月一般不同时并存)
- crontab编辑注意事项
- 周与日月不可同时并存
- 0和7均可代表星期天 2-4. crontab命令使用者的设定
在系统中默认所有用户可以设定 cron
用户黑名单/etc/cron.deny 默认存在于系统中,在此列表中出现的用户被禁止
用户白名单/etc/cron.allow 默认不存在于系统中,但当此文件存在时,deny文件失效;所有普通用户执行crontab的权利被禁止,只有在此列表中出现的用户允许执行
2-5. crontab的系统配置文件
这个
crontab -e
是针对使用者的cron来设计的,如果是系统的定时任务时, 该怎么办呢?是否还是需要以crontab -e
来管理呢?cat /etc/crontab 1 SHELL=/bin/bash <==使用哪种 shell 接口 2 PATH=/sbin:/bin:/usr/sbin:/usr/bin <==执行文件搜寻路径 3 MAILTO=root <==若有额外 STDOUT,以 email 将数据发送给谁 4 # * * * * * user-name command to be executed
3. 系统临时文件
使系统中正在运行的临时文件不会被清理掉
[root@cron-host ~]# vim /usr/lib/tmpfiles.d/westos.conf 类型 名称 权限 所有人 所有组 存在时间(s,m,d) systemd-tmpfiles --create /usr/lib/tmpfiles.d/westos.conf ##创建 systemd-tmpfiles --clean /usr/lib/tmpfiles.d/westos.conf ##清理