• Linux中的定时任务at、crontab


    at

    at命令可以用来在某一时段执行一次任务,只会执行一次,不会重复执行。

    at命令是由atd服务来控制的,使用之前先查看atd服务是否正常:

    $ /etc/init.d/atd status
    * atd is running
    

    如果没有的话就需要安装:

    $ sudo apt-get install at
    $ /etc/init.d/atd start
    

    at命令的基本语法:

    at [options] TIME
    

    常用的options:

    • -m:当at工作完成之后,用email通知用户任务已经执行完成
    • -l:列出目前所有的任务
    • -d:取消一个任务

    TIME是时间,常用的格式:

    • HH:MM:在今天的某时某刻开始执行任务,如果时间已过,则延迟到明天的这个时间开始。
    • HH:MM YYYY-MM-DD:在具体的某年某月某天执行。
    • HH:MM[am|pm] [Month] [Date]
    • HH:MM[am|pm] + number [minutes|hours|days|weeks]:在某个时间点再加上时间后执行,ex:now + 1 minutes

    一个例子:
    创建一个任务,1分钟后输入hello world到/tmp/t1文件

    $ at now + 1 minutes
    at> echo "hello world" > /tmp/t1
    at> <EOT>   # 输入完成后按Ctrl + d保存
    

    可以使用at -l或者atq来查看刚才创建的任务:

    $ atq
    3	Fri Aug 11 22:41:00 2017 a jby
    

    3是任务序号,如果创建错了任务就可以使用这个数字来删除:

    $ atrm 3
    

    权限

    可以用过配置文件来设置哪些用户能使用at命令,哪些用户不能使用:

    1. at命令会先查找/etc/at.allow文件,如果这个文件存在,那么只有在这个文件里面的用户才能使用at命令。
    2. 如果不存在,那么就会查找/etc/at.deny文件,如果文件存在,那么不在这个文件里面的用户才可以使用at命令。
    3. 如果2个文件都不存在,那么只有root才能使用at命令

    2个文件的内容格式都是一行一个用户名

    batch

    batch命令的用法跟at一样,只不过batch添加的任务会在CPU负载小于0.8的时候才执行,如果到了执行时间点CPU负载过高就会延缓执行。

    crontab

    crontab命令是用来一直循环执行某个任务。

    基本语法:

    crontab [-u user] [-l-e-r]
    
    • -u:只有root才能使用,用来帮其他的用户创建或者删除任务。
    • -e:编辑任务
    • -l:查看当前的任务
    • -r:删除所有的任务

    一个列子
    输入crontab -e进入编辑模式,输入5 * * * * echo "hello >> /tmp/t1",然后保存退出(不需要重新启动cron服务,会自动每分钟重新读取任务内容)。

    任务的格式为:

    分 时 日 月 周 命令
    

    前面5个字段是时间,他们之间用空格隔开。表示的就是再某一个时间点执行任务,取值范围就是正常的时间取值范围(比如:分钟是0-59,时是0-23),周的取值是0-7表示星期一到星期天,o跟7都是星期天

    例子:

    • 5 * * * * 每个小时的5分执行任务
    • 10 3 * * * 每天的3点10分执行任务
    • 10 3 2 * * 每个月2号的3点10分执行任务

    一些特殊的取值:

    • *:表示任何时刻
    • ,:英文逗号表示and的意思,比如 10 3,6 * * * 每天的3点10分跟6点10分都执行任务
    • -:减号表示的范围,比如:10 3-6 * * * 每天的3点到6点之间的每个小时的10分都执行任务
    • /n:表示的是单位间隔,比如 */1 * * * * 每隔1分钟执行一次任务

    权限

    cron服务也有两个文件/etc/cron.allow/etc/cron.deny来控制用户的使用权限,逻辑都at一样

  • 相关阅读:
    程序人生2008年(49)
    多种方式实现字符串/无符号数反向输出_栈_递归_头尾指针
    Ebusiness suite system service management ( EBS服务管理)
    文件系统FatFsR0.09a翻译(三):ff.h
    cocurrent request,program,process 并发请求,程序,进程的概念
    Laravel 5.* 执行seeder命令出现错误的解决方法
    Laravel修改配置后一定要清理缓存 "php artisan config:clear"!
    laravel构造函数和中间件执行顺序问题
    Laravel5.3使用学习笔记中间件
    laravel 是怎么做到运行 composer dumpautoload 不清空 classmap 映射关系的呢?
  • 原文地址:https://www.cnblogs.com/jiangbingyang/p/7445343.html
Copyright © 2020-2023  润新知