• 零基础学习Linux系统计划任务cron


    零基础学习Linux系统计划任务cron记录

    简介

    计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思。
    在Linux中,我们经常用到 cron 服务器来完成这项工作。
    cron服务器可以根据配置文件约定的时间来执行特定的任务。
    
    • 1
    • 2
    • 3

    一次性调度执行 at

    at命令 – 一次性定时计划任务
    at命令允许指定运行脚本时间,at的守护进程atd会以后台模式运行,检查系统上的一个特殊目录来获取at命令的提交的作业。
    默认情况下,atd守护进程每60秒检查一次目录。
    有作业时会检查作业运行时间,如果与当前时间匹配,则运行此作业。
    
    语法格式:at [参数]
    参数:
    	atq	查看系统中的等待作业
    	-d	删除系统中的等待作业(等效于atrm命令)
    	-c	打印任务的内容
    	-q	使用指定的列队
    	-f	将指定文件提交等待作业
    	-t	以时间的形式提交运行作业
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    查看系统中的等待作业

    [root@study ~]# atq
    
    • 1

    使用”at -d”或者”atrm”(二者同效)指定id来删除系统中的等待作业,id为”atq”命令输出的第一行顺序数字

    [root@study ~]# at -d 1
    Cannot find jobid 1
    
    • 1
    • 2

    立即执行at_test.sh脚本

    [root@study ~]# at -f at_test.sh now
    job 1 at Sat Nov 19 13:56:00 2022
    
    • 1
    • 2

    在2分钟之后运行 at_test.sh脚本

    [root@study ~]# at -f at_test.sh now+2 min
    job 2 at Sat Nov 19 14:01:00 2022
    
    • 1
    • 2

    在14:10运行 at_test.sh 脚本

    [root@study ~]# at -f at_test.sh 14:05
    job 3 at Sat Nov 19 14:05:00 2022
    
    • 1
    • 2

    在2022年11月20日运行 at_test.sh脚本

    [root@study ~]# at -f at_test.sh 11/20/2022
    job 4 at Sun Nov 20 14:02:00 2022
    
    • 1
    • 2

    循环调度执行 cron

    crond 服务的启动和自启动

    crontab命令 – 管理定时计划任务
    crontab命令来自于英文词组“cron table”的缩写,其功能是管理定时计划任务。
    定时计划任务,故名意思就计划好的任务,到了时间就会自动执行,在Linux系统中的crond是一个定时计划任务服务,
    用户只要能够按照正确的格式(分、时、日、月、星期、命令)写入到配置文件中,
    那么就会按照预定的周期时间自动的执行下去,而crontab命令则是用于配置的工具名称。
    
    语法格式:crontab [参数]
    参数:
    	-e	编辑任务
    	-l	列出任务
    	-r	删除任务
    	-u	指定用户名字
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    管理当前用户的计划任务

    [root@study ~]# crontab -e
    #进入 crontab 编辑界面。会打开Vim编辑你的任务
    * * * * * 执行的任务
    
    • 1
    • 2
    • 3

    这个文件中是通过 5 个“”来确定命令或任务的执行时间的,这 5 个“”的具体含义如下表 所示。

    项目含义范围
    第一个"*"一小时当中的第几分钟(minute)0~59
    第二个"*"一天当中的第几小时(hour)0~23
    第三个"*"一个月当中的第几天(day)1~31
    第四个"*"一年当中的第几个月(month)1~12
    第五个"*"一周当中的星期几(week)0~7(0和7都代表星期日)

    在时间表示中,还有一些特殊符号需要学习,如下表所示。

    特殊符号含义
    *(星号)代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。
    ,(逗号)代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。
    -(中杠)代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。
    /(正斜线)代表每隔多久执行一次。比如"/10***命令",代表每隔 10 分钟就执行一次命令。

    当“crontab -e”编辑完成之后,一旦保存退出,那么这个定时任务实际就会写入 /var/spool/cron/ 目录中,每个用户的定时任务用自己的用户名进行区分。而且 crontab 命令只要保存就会生效,只要 crond 服务是启动的。

    crontab举例

    时间含义
    45 22 *** 命令在 22 点 45 分执行命令
    0 17 ** 1 命令在每周一的 17 点 0 分执行命令
    0 5 1,15** 命令在每月 1 日和 15 日的凌晨 5 点 0 分执行命令
    40 4 ** 1-5 命令在每周一到周五的凌晨 4 点 40 分执行命令
    */10 4 *** 命令在每天的凌晨 4 点,每隔 10 分钟执行一次命令
    0 0 1,15 * 1 命令在每月 1 日和 15 日,每周一个 0 点 0 分都会执行命令,注意:星期几和几日最好不要同时出现,因为它们定义的都是天,非常容易让管理员混淆

    案例:
    让系统每隔 3 分钟就向 /tmp/test 文件中写入一行“hello world!”,验证一下系统定时任务是否会执行。

    [root@study ~]# crontab -e
    #进入编辑界面
    */3 * * * * /bin/echo "hello world!" >> /tmp/test
    
    • 1
    • 2
    • 3

    查看当前用户的已有计划任务列表

    [root@study ~]# crontab -l
    */3 * * * * /bin/echo "hello world!" >> /tmp/test
    
    • 1
    • 2

    删除当前用户下所有的定时任务。如果只想删除某个定时任务,则可以执行“crontab -e”命令进入编辑模式手工删除

    [root@study ~]# crontab -r
    [root@study ~]# crontab -l
    no crontab for root
    
    • 1
    • 2
    • 3
  • 相关阅读:
    4-SpringBoot架构设计与实现原理-SpringBoot自定义starter
    hadoop 3.x大数据集群搭建系列5-安装Flink
    【整合】基于卷积神经网络CNN 的 cat、dog、panda 分类
    myBatis
    基于STM32的花卉温室控温系统设计
    golang工程——opentelemetry简介、架构、概念、追踪原理
    【python函数】内置函数slice()用法解析
    log4j2的简单使用
    Python是信奥的基础吗,学习信奥要不要先学python
    opencv快速入门(三)——图像几何变换
  • 原文地址:https://blog.csdn.net/zgm_dj/article/details/127935890