• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    shell之定时周期性执行脚本的方法示例

    示例

    1.编写测试脚本脚本 time .sh

    $ cat time.sh 
    #! /bin/bash
    echo $(date +%s) >> /home/ocean/out.txt

    保存完毕后记得给予权限 chmod 777 test.sh

    2.添加定时任务

    $ crontab -e
    no crontab for ocean - using an empty one
    
    Select an editor. To change later, run 'select-editor'.
     1. /bin/nano    ---- easiest
     2. /usr/bin/vim.tiny
     3. /bin/ed
    
    

    内容编辑为:每一分钟执行一次

    # m h dom mon dow  command
     * * * * * /home/ocean/workspaces/shell/time.sh
    

    3.查看定时任务是否添加成功

    $ crontab -l 

    4.重启cron:新加入的定时任务不会马上执行,一般要等一会儿,除非你重启服务器

    $ sudo service cron restart 
    

    注意,新创建的cron作业,不会马上执行,至少要过2分钟才执行。如果重启cron服务则会马上执行。

    5. 查看执行结果

    $ cat out.txt
    1552543807
    1552543861
    1552543921
    1552543981
    1552544041
    1552544101

    原理

    ubuntu默认安装了cron,是开机自启动的。

    当cron启动后,它会读取它的所有配置文件,然后cron会根据命令和执行时间来调度工作任务。

    cron有两个配置文件,一个是一个全局配置文件(/etc/crontab),是针对系统任务的;一组是crontab命令生成的配置文件(/var/spool/cron下的文件),是针对某个用户的.定时任务配置到任意一个中都可以。

    每个用户的计划任务配置文件

    $ ls -l /var/spool/cron/
    total 4
    drwx-wx--T 2 root crontab 4096 Nov 16 2017 crontabs
    

    备注:这个歌目录下只会有一个crontabs,就算新添加其他计划,也只会有一个。

    全局性配置文件

    $ cat /etc/crontab 
    # /etc/crontab: system-wide crontab
    # Unlike any other crontab you don't have to run the `crontab'
    # command to install the new version when you edit this file
    # and files in /etc/cron.d. These files also have username fields,
    # that none of the other crontabs do.
    
    SHELL=/bin/sh
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    
    # m h dom mon dow user command
    17 * * * * root  cd /  run-parts --report /etc/cron.hourly
    25 6 * * * root test -x /usr/sbin/anacron || ( cd /  run-parts --report /etc/cron.daily )
    47 6 * * 7 root test -x /usr/sbin/anacron || ( cd /  run-parts --report /etc/cron.weekly )
    52 6 1 * * root test -x /usr/sbin/anacron || ( cd /  run-parts --report /etc/cron.monthly )

    ununtu 通过调用 run-parts 命令,定时运行四个目录下的所有脚本。
    1)/etc/cron.hourly,目录下的脚本会每个小时让执行一次,在每小时的17分钟时运行;
    2)/etc/cron.daily,目录下的脚本会每天让执行一次,在每天的6点25分时运行;
    3)/etc/cron.weekly,目录下的脚本会每周让执行一次,在每周第七天的6点47分时运行;
    4)/etc/cron.mouthly,目录下的脚本会每月让执行一次,在每月1号的6点52分时运行;
     当然,以上的时间均是系统默认时间,可以根据自己的需求进行修改。

    corn程序会在后台运行并且检查cron时间表,以获知已安排执行的主页。

    开启关闭cron

    命令 作用
    sudo service cron status 查看cron状态
    sudo /etc/init.d/cron start 启动cron
    sudo /etc/init.d/cron stop 关闭cron
    sudo /etc/init.d/cron restart 重启cron

    cron时间表

    为cron时间表添加条目, 其格式为

    min hour dayofmonth month dayofweek command

    分布代表分 时 天 月 星期几 数值范围分别是 0-59: 0-23 :1-31: 1-12: 0-7

    记住几个特殊符号的含义:

    corn时间表例子:

    可以用三字符的文本值(mon、tue、wed、thu、fri、sat、sun)或数值(0为周日,6为周六)
     来指定dayofweek表项。

    cron目录

    如果脚本对精确的执行时间要求不高,用预配置的cron脚本更方便

    $ ls /etc/cron.*ly
    /etc/cron.daily:
    0anacron apt-compat  cracklib-runtime logrotate mlocate popularity-contest   update-notifier-common
    apport  bsdmainutils dpkg       man-db   passwd  ubuntu-advantage-tools
    
    /etc/cron.hourly:
    
    /etc/cron.monthly:
    0anacron
    
    /etc/cron.weekly:
    0anacron man-db update-notifier-common

    比如,如果脚本每天运行一次,只要将脚本复制到daily目录,cron就会每天执行它【根据/etc/crontab下配置的时间】

    anacron

    缺点:cron可以执行一些定时任务,但是如果这个时间点来了,但是此时linux系统正在关机中,那么这个定时任务不能执行。即使系统再次开机,cron也不会去执行哪些已经错过了的程序。

    解决:anacron,开机时会自动运行关机期间的作业。前提是这个程序位于cron目录之下。

    应用场景:anacron 用于以天为单位的频率运行命令。它的工作与 cron 最大的不同在于,它假设机器不会一直开机。

    anacron 工作原理

    anacron 的任务被列在/etc/anacrontab

    sudo cat /etc/anacrontab
    [sudo] password for ocean: 
    # /etc/anacrontab: configuration file for anacron
    
    # See anacron(8) and anacrontab(5) for details.
    
    SHELL=/bin/sh
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    HOME=/root
    LOGNAME=root
    
    # These replace cron's entries
    1 5 cron.daily run-parts --report /etc/cron.daily
    7 10 cron.weekly run-parts --report /etc/cron.weekly
    @monthly 15 cron.monthly run-parts --report /etc/cron.monthly
    
    

    ununtu 通过调用 run-parts 命令,定时运行3个目录下的所有脚本。

    从上面可以看出,anacron 的运行频率的最小时间是天。 【cron是分钟】

    $ ls -l /var/spool/anacron/
    total 12
    -rw------- 1 root root 9 Jun 1 10:25 cron.daily
    -rw------- 1 root root 9 May 27 11:01 cron.monthly
    -rw------- 1 root root 9 May 30 10:28 cron.weekly
    

    anacron 程序使用自己的时间表来检查工作目录

    时间表格式

    period delay identifier command

    anacron 会检查任务是否已经在period字段执行的时间被执行了,如果没有,则等待delay字段中指定的分钟数后,执行command字段中指定的命令。

    一旦任务被执行,它会使用 job-id (时间戳文件名)字段中指定的名称将日期记录在 /var/spool/anacron 目录中的时间戳文件中。

    cron VS anacron

    cron是linux自带的守护进程,用来重复运行哪些被设定好了确定的运行时间的任务,如果机器处于关机状态并错过了任务执行时间,这个任务就无法执行了
    crontab(cron table的简称)既可以指cron用来定期执行特定任务所需要的列表文件,又可以指用来创建、删除、查看当前用户(或者指定用户)的crontab文件的命令。
    anacron不是守护进程,可以看做是cron守护进程的某种补充程序,anacron是独立的linux程序,被cron守护进程或者其他开机脚本启动运行,可以每天、每周、每个月周期性地执行一项任务(最小单位为天)。适合于可能经常会关机的机器,当机器重新开机anacron程序启动之后,anacron会检查anacron任务是否在合适的周期执行了,如果未执行则在anacron设定好的延迟时间之后只执行一次任务,而不管任务错过了几次周期。举个例子,比如你设定了一个每周备份文件的任务,但是你的电脑因为你外出度假而处于关机状态四周,当你回到家中开机后,anacron会在延迟一定时间之后只备份一次文件。由于发行版的不同,cron守护进程如何运行anacron会有所不同。

    cron anacron
    它是守护进程 它不是守护进程
    适合服务器 适合桌面/笔记本电脑
    可以让你以分钟级运行计划任务 只能让你以天为基础来运行计划任务
    关机时不会执行计划任务 如果计划任务到期,机器是关机的,那么它会在机器下次开机后执行计划任务
    普通用户和 root 用户都可以使用 只有 root 用户可以使用(使用特定的配置启动普通任务)

    cron 和 anacron 主要的区别在于 cron 能在那些持续运行的机器上有效地运行,而 anacron 是针对那些会在一天内或者一周内会关机的机器。

    参考:
    https://blog.csdn.net/qq_32693119/article/details/79816097
     https://www.cnblogs.com/daxian2012/articles/2589894.html
     https://www.cnblogs.com/zhoul/p/9931664.html
     https://www.linuxprobe.com/cron-anacron-work.html

    到此这篇关于shell之定时周期性执行脚本的方法示例的文章就介绍到这了,更多相关shell 定时周期性执行脚本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • Linux crontab定时执行Shell脚本需要执行特定的命令时解决思路
    • 使用Linux shell脚本实现FTP定时执行批量下载指定文件
    上一篇:shell模糊匹配与正则详解
    下一篇:shell 判断字符串是否存在数组中的实现示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    shell之定时周期性执行脚本的方法示例 shell,之,定时,周期性,执行,