示例

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

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 cronhttp://www.cppcns.comtab

# 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=http://www.cppcns.com/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

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

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

逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“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分执行

FUSolmIo

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-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,开机时会自动运行关机期间的作业。前提是这个程序位http://www.cppcns.com于cron目录之下。

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

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

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

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 定时周期性执行脚本内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

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

本文地址: http://www.cppcns.com/os/linux/356073.html

linux root定时脚本,shell之定时周期性执行脚本的方法示例相关推荐

  1. linux脚本简单定时,shell之定时周期性执行脚本的方法示例

    示例 1.编写测试脚本脚本 time .sh $ cat time.sh #! /bin/bash echo $(date +%s) >> /home/ocean/out.txt 保存完毕 ...

  2. Linux Crontab定时执行脚本出错,但手动执行脚本正常原因及解决方案

    Linux Crontab定时执行脚本出错,但手动执行脚本正常原因及解决方案 实际开发场景 需要开发一个Flink监控程序,初步使用shell脚本进行监控,如果发现失败了,则自动重新运行Flink命令 ...

  3. linux创建文件内容三行,shell之创建文件及内容的方法示例

    shell之创建文件夹: [root@vbox-nginx shell_command]# vi ./mkdir.sh #!/bin/sh parentDir="/media/sf_Proj ...

  4. contab 手动可以 java_crontab 定时执行脚本出错,但手动执行脚本正常

    原因: crontab 没有去读环境变量,需要再脚本中手动引入环境变量,可以用source 也可以用export 写死环境变量. 为了定时监控Linux系统CPU.内存.负载的使用情况,写了个Shel ...

  5. linux启动时、登录时或注销时执行脚本

    init.d开机启动 在启动时执行 Linux 脚本 有两种传统的方法可以实现在启动时执行命令或脚本: 方法 #1 - 使用 cron 任务 除了常用格式(分 / 时 / 日 / 月 / 周)外,cr ...

  6. Shell编程规范与变量(shell编程规范,执行脚本文件的四种方式,管道符号与重定向,shell变量的作用于类型)

    文章目录 Shell脚本概述 Shell脚本的概念 Shell的作用 Shell编程规范 重定向与管道 Shell脚本变量 自定义变量 特殊变量 Shell脚本概述 Shell Script ,She ...

  7. linux批量执行命令脚本,2.3-命令批量执行脚本

    命令批量执行脚本,同样需要两个脚本来实现:1 exe.expect 2 exe.sh 3 ip.list    IP列表 cat exe.expect #!/usr/bin/expect set ho ...

  8. linux中登录远程主机,LinuxSSH登录远程主机并执行脚本

    两台Centos6.5 64位主机: N206 N203N206的export.sh,远程执行N203主机上/root/share.sh脚本#!/bin/bash source ~/.bash_pro ...

  9. Linux JAVA执行source,linux 下source、sh、bash、./执行脚本的区别

    1.source命令用法: source  FileName 作用:在当前 bash环境下读取并执行FileName中的命令.该filename文件可以无"执行权限" 注:该命令通 ...

  10. Shell(1)——执行脚本

    除了用命令行在终端操作以外,我们还可以用脚本来实行相关操作,首先得会如何执行脚本. 首先我们在终端创建一个script 可以通过如下几种方法执行该脚本: (1)/bin/bash(首行可以没有/bin ...

最新文章

  1. JSP实现大学生综合素质测评系统
  2. 安装 Ruby 和 Rails 开发环境
  3. Python爬虫基本框架
  4. python dataframe删除指定行_pandas.DataFrame删除/选取含有特定数值的行或列
  5. 用squid配置代理服务器(基于Ubuntu Server 12.04)
  6. [flask 优化] 由flask-bootstrap,flask-moment引起的访问速度慢的原因及解决办法
  7. redis的内存优化【转】
  8. arm linux 自动挂载,ARM-Linux支持并自动挂载U盘
  9. mysql5.1 utf8_编译安装mysql 5.1使用utf8解决乱码问题
  10. Jsp版本的计算器(九大对象)
  11. pandas中DataFrame的修改元素值、缺失值处理、合并操作的方法
  12. php 每七天执行代码,十天学会PHP之第七天
  13. Java开源大全 网站
  14. 元器件及测量基础实验
  15. win10硬盘读写速度测试-crystaldiskmark
  16. vue day02 笔记(回顾+json-server用法)
  17. 对校招生培养工作的建议_对我校招生工作的一些粗浅想法(精)
  18. Java征兵系统(可拓展)
  19. Ubuntu16.04 Modelsim 10.2c安装
  20. Equalize Prices

热门文章

  1. 社区价值:福山论自组织、社区、社会资本
  2. STM32基础12--数模转换(DAC)
  3. YNWA,同样是我们普通人的鞭策
  4. 工行u盾显示316_工行U盾无法被电脑识别(方法全集)
  5. C#注册机与绑定软件(转发自:韩兆新的博客园的C#学习笔记——软件注册与注册机)...
  6. MongoDB的授权和权限
  7. windows的hosts文件位置
  8. Android 快速集成文档校正能力 超简单
  9. 网吧电影视频服务器架设完全入门教程(转)
  10. 香港理工大学计算机专业课程,香港理工大学计算机系包括哪些专业