zoukankan      html  css  js  c++  java
  • 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 表示错误输出等同于标准输出,标准输出已重定向到空设备,所以错误输出也重定向到空设备,不输出





  • 相关阅读:
    如何将网格式报表打印成其它样式
    拥有与实力不相称的脾气是种灾难——北漂18年(23)
    8.8.1 Optimizing Queries with EXPLAIN
    mysql 没有rowid 怎么实现根据rowid回表呢?
    secondary index
    8.5.5 Bulk Data Loading for InnoDB Tables 批量数据加载
    mysql 中key 指的是索引
    8.5.4 Optimizing InnoDB Redo Logging 优化InnoDB Redo 日志
    8.5.3 Optimizing InnoDB Read-Only Transactions 优化InnoDB 只读事务
    8.5.1 Optimizing Storage Layout for InnoDB Tables InnoDB表的存储布局优化
  • 原文地址:https://www.cnblogs.com/Howlet/p/15084283.html
Copyright © 2011-2022 走看看