• At 、Crontabl定时任务


    之前笔者是在本地写的博客,然后用 windows 定时任务启动写的脚本上传到 Github 上,现在又遇到了 Linux 上的定时任务,项目还要用到 Quartz 定时任务框架



    1. 一次性定时任务 at

    at 命令是用于一次的定时任务,使用起来十分简便,而且定时的日期多样化,注意其需要 atd 服务的支持



    1.1 查询 atd 是否启动

    一般系统(Linux)都自带并自启 atd,可用以下两个命令查询服务是否启动

    $ systemctl status atd
    # Active: active (running)
    
    $ ps -ef | grep atd
    # root 1212 1 0 Jun14 ? 00:00:00 /usr/sbin/atd -f
    


    1.2 at 命令格式

    at 有两种命令,格式如下:

    # 第一种
    $ at 时间
    $ > 输入要执行的内容
    $ > EOF(Ctrl + D,表示输入结束)
    

    # 第二种
    $ 将要执行的命令 |  at 时间
    

    笔者下面使用第一种格式来演示命令的使用



    1.3 at 命令参数

    at 的命令参数也十分简单,看看就会使用了

    $ at  [参数]  [时间]
    
    	-l:待执行的任务列表
    	-d:删除指定的待执行任务
    	-m:任务执行完后向linux用户发送,即时没标准输出
    	-f:指定包含具体指令的任务文件
    	-q:指定新任务的队列名称
    	-c: 打印任务的内容到标准输出
    
    $ atq  待执行的任务列表(等价于 $ at -l)
    $ atrm 删除待执行的任务(等价于 $ at -d)
    


    1.4 用例

    $ date 查看当前时间
    # Sat Jul 31 13:38:35 CST 2021
    
    $ at 13:40
    $ > ls >> at.out
    $ > EOF
    
    # 然后就会在当前目录下看到一个 at.out 文件
    






    2. 周期定时任务 crontab

    crontab 命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似。系统会自动启动 crond 进程每分钟定期检查是否有要执行的任务


    使用crontab需要知道了解几个概念:

    • crond:一个服务进程,每分钟去检查配置文件是否有要执行的任务
    • 任务文件:记录了需要执行的任务
    • crontab:修改任务文件的工具(即往配置文件里面增删定时任务)



    2.1 配置文件


    Linux下的任务调度分为:

    • 系统调度:系统周期性要执行的任务(写缓存到硬盘、日志清理等,在/etc/crontab文件中配置)
    • 用户调度:用户定期要执行的任务(数据备份、定时邮件等,在/var/spool/cron/用户名为名的文件中配置)

    使用crontab命令的权限:

    • /etc/cron.deny:该文件中所列用户不允许使用crontab命令
    • /etc/cron.allow:该文件中所列用户允许使用crontab命令

    脚本存放(我们还可以把脚本放在下面,让它每小时/天/星期/月执行一次):

    • /etc/cron.hourly
    • /etc/cron.daily
    • /etc/cron.weekly
    • /etc/cron.monthly


    2.2 任务文件的格式

    在crontab任务文件中,每一行代表一项任务。每行有六个字段,分别是:

    minute    hour    day    month    week    command
    
    * * * * * command 每1分钟执行一次command
    
    3,15 * * * * command  每小时的第3和第15分钟执行
    
    • * :每分,每时,每日的意思
    • , :用逗号隔开,例如"2,5"表示第2和第5,不包括第4、第3
    • - :用中杠隔开,例如"2-5"表示"2,3,4,5"
    • / :表示间隔频率,例如 */2 ,是分为单位,则每2分钟执行一次
    • % :在crontab文件中表示换行,脚本或命令中则要%来转义


    2.3 crontab 命令格式

    $ crontab [选项] [参数]
    
    	-e:直接编辑该用户的计时器设置
    	-l:列出该用户的计时器设置
    	-r:删除该用户的计时器设置
    	-u<用户名称>:指定要设定计时器的用户名称
    


    2.4 示例


    2.4.1 示例1

    $ vim
    # !/bin/sh echo "cron test" test.sh
    
    $ chmod +x test.sh
    
    $ crontab -e
    * * * * * /root/test.sh
    
    # 每次执行会将控制台输出以邮件形式发送到对应的用户,用crontab -l可以查看有没有消息,具体内容在
    $ cat /var/spool/mail/root
    

    2.4.2 示例2

    # 表示输入内容追加到log.txt中,而不是输出到屏幕
    # 2表示错误输出也当成标准输出
    * * * * * /root/test.sh >/dev/null 2>&1(默认是1,可以不写)
    * * * * * /root/test.sh 1>/dev/null 2>&1
    
    • /dev/null:表示空设备,就是忽略其输出

    • 系统的3个默认I/O:

      • 0是标准输入(键盘)
      • 1是标准输出(屏幕),也是默认的
      • 2是标准错误
    • &:表示等同于,2>&1,表示2的输出重定向等同于1,如果在控制台调试,也就是屏幕上,方便调试

    • 1>/dev/null:表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息

    • 2>&1 表示错误输出等同于标准输出,标准输出已重定向到空设备,所以错误输出也重定向到空设备,不输出





  • 相关阅读:
    netcore 发布到IIS上常见错误
    mysql解压文件安装
    VS2017 怎么启用nuget程序包还原?
    vue-qr生成下载二维码
    控制器,action, 过滤器, 权限
    WebSocket浅析(一):实现群聊功能
    BOM元素之window对象
    arguments及arguments.callee
    Spring入门6事务管理2 基于Annotation方式的声明式事务管理机制
    Spring入门5.事务管理机制
  • 原文地址:https://www.cnblogs.com/Howlet/p/15084283.html
Copyright © 2020-2023  润新知