首页 > 代码库 > 概论:任务计划at与cron

概论:任务计划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 * * * *

 

 

概论:任务计划at与cron