简单计划任务
at
at 命令在特定时间执行特定任务
- 语法为:at [option] TIME
- [option] 常用选项:
- -q QUEUE:使用指定的队列,缺省值为 a
- QUEUE范围为a-z,A-Z
- -l:列出指定队列中等待运行的作业;想当于 atq
- -d:删除指定的作业;相当于 atrm
- -c:查看具体作业任务
- -f:/path/from/somefile:从指定的文件中读取任务
- -q QUEUE:使用指定的队列,缺省值为 a
- TIME格式:
- HH:MM [YYYY-mm-dd]
- noon,midnight,teatime
- tomorrow
- now+# {minutes, hours, days, OR weeks} (# 号代表数字)
新增计划任务
[root@2w3i-Cs ~]# at -q a now+5 minutes
at> echo "Hello at"
at> <EOT> //输入完任务后,使用 Ctrl+D 提交
job 3 at 2016-12-15 16:23
查看任务列表
[root@2w3i-Cs ~]# at -l
3 2016-12-15 16:23 a root
注意
作业的执行结果以邮件通知给相关用户
batch
该命令无须指定时间,系统会自行选择空闲时间去执行指定任务
周期性计划任务
crontab
crontab 命令将计划要周期性执行的任务提交给crond,由其来实现到点运行
系统cron任务
- 系统维护作业
- /etc/crontab
/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
例如:想在 每天21点18分运行date命令,在该文件末尾添加如下格式的文本
# 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
18 21 * * * root date > /root/test.txt
用户cron任务
- crontab 命令 即编辑的 每个用户的cron任务文件
- 每个用户都有专用的cron任务文件位置:/var/spool/cron/USERNAME
- 语法:
crontab [-u user] [-l | -r | -e] [-i]
- -l:列出用户所有任务
- -e:编辑用户的cron任务
- -r:移除所有任务
-i:同 -r 一同使用,以交互式模式让用户有选择地移除指定任务
-u user:仅root可运行,代为为指定用户管理cron任务
例如:想在 每天21点18分运行date命令,执行如下命令
[root@2w3i-Cs ~]# crontab
18 21 * * * root date > /root/test.txt
[root@2w3i-Cs ~]# crontab -l
18 21 * * * root /bin/date > /root/test.txt
[root@2w3i-Cs ~]# cat /var/spool/cron/root
18 21 * * * root /bin/date > /root/test.txt
[root@2w3i-Cs ~]#
Tip:
输入完成后 使用 Ctrl + D 提交, 使用 Ctrl + Backspace 进行退格操作
注意
- 运行结果以邮件通知给相关用户;
- 对于cron任务来讲,%有特殊用途;如果在命令中要使用%,则需要转义;不过,如果把%放置于单引号中,也可以不用转义;
Cron任务格式说明
各字段意义
* * * * * user-name command to be executed
如上所示共有7个字段
- 第1个字段 表示 分钟 (minute) 允许范围 (0 - 59)
- 第2个字段 表示 小时 (hour) 允许范围 (0 - 23)
- 第3个字段 表示 天 (day of month) 允许范围 (1 - 31)
- 第4个字段 表示 月 (month) 允许范围 (1 - 12) 或者使用 jan,feb,mar,apr …表示
- 第5个字段 表示 星期 (day of week) 允许范围 (0 - 6) 或者使用 sun,mon,tue,wed,thu,fri,sat 表示
- 第6个字段 表示 用户名(user-name)即会用指定用户名环境变量执行
- 第7个字段 表示 执行的命令(command to be executed)
时间表示法
(1) 特定值
- 给定时间点有效取值范围内的值
- 如:minute (0 - 59), hour (0 - 23),…,等
(2) *
- 给定时间点上有效取值范围内的所有值
- 表示”每…”,如:每分钟,每小时,…,等
(3) 离散取值
- #,#,#
- 表示特定时间点
- 如在minute下 3,6,10
- 则表示 第3分钟 第6分钟 和 第10分钟
(4) 连续取值
- #-#
- 表示特定时间范围
- 如在hour下 3-7
- 则表示 从3点到7点
(5) 在指定时间范围上,定义步长
- /#
- 如 month 下 /3 表示每隔3个月
练习
1.每4小时备份一次/etc目录至/backup目录中,保存的文件名称格式为“etc-yyyy-mm-dd-HH.tar.xz”
* */4 * * * root /bin/tar -cvJf /backup/etc-$(/bin/date +%Y-%m-%d-%H).tar.xz /etc/ > dev/null 2>/root/error.txt
2.每周2, 4, 7备份/var/log/messages文件至/logs目录中,文件名形如“messages-yyyymmdd”
* * * * 2,4,7 root /bin/cp /var/log/messages /logs/messages-$(/bin/date +%Y%m%d)
3.每两小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中
* */2 * * * root /bin/cat /proc/meminfo | /bin/grep -i ^[SM] >> /tmp/meminfo.txt
4.工作日时间内,每小时执行一次“ip addr show”命令
* */1 * * 1-5 root /usr/sbin/ip addr show
注意
此处使用的 指定用户名 为 root, 则使用该用户的cron服务
执行命令切记一定为绝对路径
如 执行date 为 /bin/date