概论:任务计划at与cron
任务计划
- 指定一个未来的某个时间点执行任务。
- at:一次性任务。
- cron:周期性任务。
at使用介绍
查看目前状态
- CentOS 6:service atd status ##目前启动状态
- CentOS 6:chkconfig --list atd ##是否开机启动
- CentOS 7:systemctl is-enabled atd.service ##查看是否开机启动
- CentOS 7:systemctl statemctl atd.service ##现在是否启动状态
使用方法(交互式命令)
简单示例:
[root@CentOS6 ~]# at 21:35
at> echo 11112222
at> <EOT>
job 2 at 2017-05-03 21:35
查看任务 如果有执行成功不会显示下面的内容 时间不会特别准确 会差一点,(做实验的时候查了十几秒)重启任务也不会丢,
因为已经把任务放进了/var/spool/at这个目录下成为可执行文件,任务执行成功文件自动删除。
[root@CentOS6 ~]# at -l
1 #任务编号 2017-05-03 21:40 a root
执行成功会以邮件的方式发送到当前用户,建议把任务中的标准输出扔到/dev/null中,避免造成太多垃圾邮件。
普通用户可以创建at任务,但是默认没有访问任务文件的权限。
普通用户创建at任务后邮件会发送到root用户,自己本身不会收到。wall广播任务是发送到所有用户的。
常用选项 | 介绍说明 | 示例 |
---|---|---|
-v | 显示版本信息 | |
-l | 列出指定队列中等待运行的作业;相当于atq | |
-d | 删除指定的作业;相当于atrm | at -d # #代表任务的编号 |
-c | 查看具体作业任务 | at -c #查看作业任务文件 |
-f /path/from/somefile | 从指定的文件中读取任务 | |
m: | 当任务 被完成之后,将给用户发送邮件,即使没有标准输出 | at -m 14:34 |
黑名单白名单
- 一个用户如果即在白名单(at.allow)又在黑名单(at.deny)是可以执行的。
- 一个用户即不在at.allow又不在at.deny是不可以执行的。
- 如果at.allow文件不存在,只要不在at.deny文件中就可以使用at。
- 如果at.allow文件存在,只有此文件中的用户可使用at。证明at.allow优先级高。
- 两个文件如果都不存在默认全部拒绝(root除外)。
cron介绍 周期性任务
cron 是一个可以用来根据时间、日期、月份、星期的组合来调度对重复任务的执行的守护进程。
crontab [-u user] [-l | -r | -e] [-i]
常用选项 | 介绍说明 | 示例 |
---|---|---|
-l | 列出所有任务 | crontab -l |
-e | 编辑任务 | |
-r | 移除所有任务 | |
-i | 同-r 一同使用,以交互式模式移除指定任务 | |
-u user | 仅root 可运行,指定用户管理cron |
查看目前状态
- CentOS 7: systemctl status crond ##查看目前状态
- CentOS 6: service crond status ##查看目前状态
/etc/crontab是系统任务的配置文件,对于cron任务来说,%有特殊用途,如果需要用则需要转义,将%放置于单引号中,则可不用转义,对于比较麻烦的命令推荐直接调用脚本。
vim /etc/crontab SHELL=/bin/bash ##默认shell PATH=/sbin:/bin:/usr/sbin:/usr/bin ##PATH变量 如果需要在任务里面添加脚本需要写绝对路径 MAILTO=root ##邮件需要给谁发 # For details see man 4 crontabs ##有关细节,请查看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 分 时 日 月 周 用户 命令|脚本 @yearly root touch /app/reboot.log ##示例 每个月一号root用户新建一个文件
1、*:代表分钟 支持格式1-5 每分钟执行一次,1,3,5 在一分钟、三分钟、五分钟的时候各执行一次,*每分钟执行一次。1-3,5-9 一至三分钟每分钟执行一次,五到九分钟每分钟执行一次。
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 * * * *