Linux 计划任务

0.前提

一切命令输入输出效果基于CenOS7

1.计划任务的分类
  • 定时任务:即日常任务,每隔一段周期就执行的事务。对应crontab命令。
  • 突然任务:即临时决定需要做的,这次做完后基本没有下次。对应at命令。
  • crontab:将指定的工作或任务,例如脚本等,按照设定的周期循环执行

  • at:可以处理仅执行一次就结束的命令

2. at 命令
  1. 基础语法:

at 时间

例如:

在这里插入图片描述

注意输入完第二行后按Enter新启一行,在新一行按Ctrl+D结束输出(自动转换位<EOT>)

  1. 相关命令

    atq #查询当前设置的at任务列表,首列为任务编号,也可用 at -l

    atrm 任务编号 #删除指定任务编号的at任务

在这里插入图片描述

  1. 服务命令:

    systemctl status atd #查看服务状态

    systemctl enable atd #开机启动atd服务
    systemctl disable atd #开机不启动atd服务

    systemctl start atd #开启atd服务
    systemctl stop atd #关闭atd服务

3. crontab 命令[重点]

crontab命令依赖crond服务

crontab按照指定的格式编辑定时任务保存在crontab文件中,crond服务会每分钟定期查看crontab文件中的定时任务列表去执行任务。关系如下:

操作
依赖
读取
crontab命令
crontab文件
crond服务
  1. 一般crond服务在安装系统的时候会被默认安装,并自动运行

    systemctl status crond

    如果无效则需要安装crond服务

    crond安装:yum -y install crontabs
    启动crond服务: systemctl start crond
    crond设置开机自启动: systemctl enable crond

  2. 主要设置文件

    • 全局配置文件,位于 /etc/crontab
    • 系统默认设置, 位于/etc/cron.*/
    • 用户自定义的设置,位于 /var/spool/cron/用户名
  3. 主要命令

    举例,:设置每天的 19:30 都会定时重启一次apache服务。

    crontab -e
    
    30 19 * * * root systemctl restart httpd
    

    语法介绍:

    1. 编辑某个用户的 crontab 文件内容,如果不指定用户,则表示编辑当前用户的 crontab 文件

      crontab -e [-u 用户名]
      
    2. 通过设置crontab文件中的这五个 * 来确定任务的执行时间的, user-name是执行任务的用户,command to be executed 是要执行的命令或者脚本任务,我们具体来看下这五个 * 所代表的含义。

      *  *  *  *  * user-name  command to be executed
      

    在这里插入图片描述

    时间数值的特殊表示方法

    • * 表示任意时间
    • / 指定时间的间隔频率;*/10=每隔十分钟(位于分字段);0-23/2即每隔两小时
    • - 代表从某个数字到某个数字:10-19 即10号到19号(日字段)
    • , 开几个离散的数字:5,10-15,20即5号,10号到15号,20号(日字段)
  4. cron 命令参数

命令基本格式:crontab [选项] or crontab [选项] file

  • crontab -l [-u 用户名] #查看。显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容
  • crontab -r [-u 用户名] #删除。从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件
  • crontab -e [-u 用户名]#编辑cron服务

一般删除所有任务才用 -r 。删除单条可以 -e 编辑时,删除对应任务即可

在crontab [选项] file 命令中, file 指的是命令文件的名字,表示将 file 作为 crontab 的任务列表文件并载入 crontab,若在命令行中未指定文件名,则此命令将接受标准输入(键盘)上键入的命令,并将它们键入 crontab, 例如:crontab -u test /root/jobs.txt ,表示用/root/jobs.txt 这个文件中的任务列表载入crontab。

  1. cron任务失败常见问题

    • crond服务未启动,systemctl status crond 命令查看,systemctl start crond 启动服务
    • 脚本无权限。 chmod +x file ,chmod加上权限即可
    • 定时任务要执行的脚本中涉及文件路径时,一定要写全局路径,不能写相对路径。
    • 环境变量问题,定时任务要执行的脚本要用到java或其他环境变量时,需要通过source命令引入环境变量
  2. 常用cron

    1、每小时的第30分钟执行 ls 命令
    
    30 * * * * ls
    
    2、每10分钟执行 ls 命令
    
    */10 * * * * ls
    
    3、每天的 14:30 执行 ls 命令
    
    30 14 * * * ls
    
    4、每小时执行 ls 命令
    
    0 * * * * ls
    
    5、每天执行 ls 命令
    
    0 0 * * * ls
    
    6、每周执行 ls 命令
    
    0 0 * * 0 ls
    
    7、每年执行 ls 命令
    
    0 0 1 1 * ls
    
    8、每月 22号 的 6:22 执行 ls 命令
    
    22 6 22 * * ls
    
    9、每年的 6月22号 6:30 执行 ls 命令
    
    30 6 22 6 * ls
    
    10、每星期日的 6:30 执行 ls 命令
    
    30 6 * * 0 ls
    
    注意:0和7均可表示星期天, 1 表示星期一,以此类推;也可以用英文来表示,sun 表示星期天,mon 表示星期一等。
    
    11、每月 10号和20号 的 4:30 执行 ls 命令
    
    30 4 10,20 * * ls
    
    注意:" , " 用来连接多个不连续的时间
    
    12、每天 8~11点 的第 25 分钟执行 ls 命令
    
    25 8-11 * * * ls
    
    注意:" - " 用来连接连续的时间
    
    13、每个月中每隔 10天 的 5:30 执行 ls 命令
    
    30 5 */10 * * ls
    
    即:每月的 1、11、21、31日 在 5:30 执行一次 ls 命令
    
    14、每天 4:30 以 root 身份执行 /etc/cron.daily 目录中的所有可执行文件
    
    30 4 * * * root run-parts /etc/cron.daily
    

    30 5 */10 * * ls

    即:每月的 1、11、21、31日 在 5:30 执行一次 ls 命令

    14、每天 4:30 以 root 身份执行 /etc/cron.daily 目录中的所有可执行文件

    30 4 * * * root run-parts /etc/cron.daily

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐