我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么在shell实现定时周期性执行脚本

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么在shell实现定时周期性执行脚本

这期内容当中小编将会给大家带来有关怎么在shell实现定时周期性执行脚本,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

示例

编写测试脚本脚本 time .sh

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

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

添加定时任务

$ crontab -eno crontab for ocean - using an empty oneSelect 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

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

$ crontab -l

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

$ sudo service cron restart

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

查看执行结果

$ 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 4drwx-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/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin# m h dom mon dow user command17 * * * * root  cd / && run-parts --report /etc/cron.hourly25 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

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

  •  星号(*):代表所有可能的值,举个例子,在小时字段中,一个星号等同于每个小时;在月份字段中,一个星号则等同于每月。

  •  逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

  •  中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

  •  正斜线( / ):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

corn时间表例子:

  •  * * * * * test .sh 每分钟执行一次 test .sh

  •  */5 * * * * test .sh 每5分钟执行一次 test .sh

  •  0 */2 * * * test .sh > out 每两小时执行一次test.sh并将结果存入out中

  •  00 00 * * * /home/rich/test.sh 每天的凌晨0:0分执行

  •  30 21 * * * /home/rich/test.sh 每天的21:30分执行

  •  15 16 * * 1 command 每周一16:15 运行命令

  •  00 12 1 * * command 每个月的1号的中午12:00点执行命令

  •  00 8* * * if [date +%d -d tomorrow = 01 ] ; then ; command 每个月的最后一天8点执行命令

可以用三字符的文本值(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-commonapport  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/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/binHOME=/rootLOGNAME=root# These replace cron's entries1 5 cron.daily run-parts --report /etc/cron.daily7 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

  • period - 这是任务的频率,以天来指定,或者是@daily 、@weekly、@monthly 代表每天、每周、每月一次。你也可以使用数字:1 - 每天、7 - 每周、30- 每月,或者N - 几天。 anacron程序用此条目来检查作业的时间戳文件

  • delay - 这是在执行一个任务前等待的分钟数。

  • identifier - 条目是一种特别的非空字符串,如cron-weekly。它用于唯一标识日志消息和错误邮件中的作业。

  • command - 这是要执行的命令或 shell 脚本。

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会有所不同。

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

上述就是小编为大家分享的怎么在shell实现定时周期性执行脚本了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么在shell实现定时周期性执行脚本

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么在shell实现定时周期性执行脚本

这期内容当中小编将会给大家带来有关怎么在shell实现定时周期性执行脚本,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。示例1.编写测试脚本脚本 time .sh$ cat time.sh #! /bin/
2023-06-09

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

示例1.编写测试脚本脚本 time .sh$ cat time.sh #! /bin/bash echo $(date +%s) >> /home/ocean/out.txt保存完毕后记得给予权限 chmod 777 test.sh2.添
2022-06-04

Linux怎么实现定期执行脚本

这篇文章主要介绍“Linux怎么实现定期执行脚本”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux怎么实现定期执行脚本”文章能帮助大家解决问题。在Linux下我们用crontab来实现定期执行
2023-06-28

怎么在Linux中使用crontab定时执行Shell脚本

今天就跟大家聊聊有关怎么在Linux中使用crontab定时执行Shell脚本,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、crontab执行配置* * * * * cd /项目
2023-06-09

jenkins如何实现shell脚本化定时执行任务

这篇文章将为大家详细讲解有关jenkins如何实现shell脚本化定时执行任务,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.开发需求socket连接的auction拍卖jar包服务更新重启前半小时切走
2023-06-26

jenkins 实现shell脚本化定时执行任务的方法

1.开发需求socket连接的auction拍卖jar包服务更新重启前半小时切走nginx的访问请求。 socket发起请求之后不需要nginx执行交互可以断开了,但是socket这个任务在auction拍卖任务没结束前重启auction就
2022-06-04

使用Linux shell脚本实现FTP定时执行批量下载指定文件

使用FTP定时批量下载指定文件的shell脚本,具体实例介绍如下所示: 1、目标FTP服务器地址#FTP服务器地址 ip=10.19.15.232、FTP账号和密码 u=账号 p=密码 3、使用mget结合正则表达式下载文件#获取昨天日期,
2022-06-04

使用shell怎么在指定目录下批量执行sql脚本

今天就跟大家聊聊有关使用shell怎么在指定目录下批量执行sql脚本,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。如下所示:#!/bin/bash#execute all scrip
2023-06-09

如何使用Linux中shell脚本实现FTP定时执行批量下载指定文件

小编给大家分享一下如何使用Linux中shell脚本实现FTP定时执行批量下载指定文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用FTP定时批量下载指定文件
2023-06-09

在PHP中怎么实现定时执行方法

这篇文章主要讲解了“在PHP中怎么实现定时执行方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在PHP中怎么实现定时执行方法”吧!一、使用sleep函数首先,我们可以使用PHP的sleep
2023-07-05

shell脚本怎样实现定时监控http服务的运行状态

这篇文章主要为大家展示了“shell脚本怎样实现定时监控http服务的运行状态”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“shell脚本怎样实现定时监控http服务的运行状态”这篇文章吧。注意
2023-06-05

怎么使用shell脚本执行命令实现自动填充密码

这篇文章主要介绍“怎么使用shell脚本执行命令实现自动填充密码”,在日常操作中,相信很多人在怎么使用shell脚本执行命令实现自动填充密码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用shell脚本
2023-07-05

如何在 Java 中实现定时执行某个方法?(java怎么定时执行某个方法)

在Java开发中,有时我们需要定时执行某个方法,以满足特定的业务需求,比如定时发送邮件、定时清理缓存等。下面我们将详细介绍在Java中如何实现定时执行某个方法。一、使用Timer类Java提供了Timer类来实
如何在 Java 中实现定时执行某个方法?(java怎么定时执行某个方法)
Java2024-12-19

javascript定时器在页面最小化时不执行怎么实现

这篇文章主要讲解了“javascript定时器在页面最小化时不执行怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript定时器在页面最小化时不执行怎么实现”吧!useIn
2023-07-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录