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

     

     

  • 相关阅读:
    记一次博客被日的分析过程
    省钱版----查找 IoT 设备TTL线序__未完待续
    于bugku中游荡意外得到关于CBC翻转攻击思路
    清除浮动技巧总结
    程序猿的幸福
    Memcachedclientutils类
    leetcode 2 Add Two Numbers
    arduino小车入门教学——第三天(arduino基础)
    SAP MM模块 经常使用函数
    Java代码格式
  • 原文地址:https://www.cnblogs.com/MYue/p/6892337.html
Copyright © 2020-2023  润新知