广告
返回顶部
首页 > 资讯 > 操作系统 >如何在linux中定期执行命令
  • 677
分享到

如何在linux中定期执行命令

2023-06-09 14:06:18 677人浏览 八月长安
摘要

如何在linux中定期执行命令?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.cron,crontab以及anacron的关系cron是大多数linux发行版都自带的守护

如何在linux中定期执行命令?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

1.cron,crontab以及anacron的关系

cron是大多数linux发行版都自带的守护进程(daemon),用来重复运行某些被设定好了确定的运行时间的任务,这些任务可以是每个月运行、每周运行、每天运行,甚至是每一分钟运行。用cron执行的任务适合于24小时运行的机器,cron执行的任务会在设定好的时刻执行,当机器处于关机状态下并错过了任务执行的时间,cron任务就无法预期执行了。

crontab(cron table的简称)既可以指cron用来定期执行特定任务所需要的列表文件,又可以指用来创建、删除、查看当前用户(或者指定用户)的crontab文件的命令。

anacron不是守护进程,可以看做是cron守护进程的某种补充程序,anacron是独立的linux程序,被cron守护进程或者其他开机脚本启动运行,可以每天、每周、每个月周期性地执行一项任务(最小单位为天)。适合于可能经常会关机的机器,当机器重新开机anacron程序启动之后,anacron会检查anacron任务是否在合适的周期执行了,如果未执行则在anacron设定好的延迟时间之后只执行一次任务,而不管任务错过了几次周期。举个例子,比如你设定了一个每周备份文件的任务,但是你的电脑因为你外出度假而处于关机状态四周,当你回到家中开机后,anacron会在延迟一定时间之后只备份一次文件。由于发行版的不同,cron守护进程如何运行anacron会有所不同。

2.crontab命令,crontab文件语法

系统默认crontab文件为/etc/crontab,以及/etc/cron.d/目录下的文件,有些程序会把自己的crontab文件放在/etc/cron.d/目录下。要修改/etc/crontab以及/etc/cron.d/目录下的文件需要root权限。cron守护进程会检查/etc/crontab以及/etc/cron.d/目录下的文件,根据这些文件中的cron任务所设置的执行时间决定是否执行任务,如果当前时间与cron任务所设置的执行时间相同,则执行任务。

每个用户自己的crontab文件都会被放在 /var/spool/cron目录下,默认为空,可以使用crontab命令创建。cron守护进程会检查/var/spool/cron目录下的文件,根据这些文件中的cron任务所设置的执行时间决定是否执行任务,如果当前时间与cron任务所设置的执行时间相同,则执行任务。

当cron的配置文件发生改变时,不需要重置cron守护进程。cron守护进程会检查配置文件的变化。

创建自己的crontab之前,首先要设置环境变量EDITOR,cron进程根据它来确定使用哪个编辑器编辑crontab文件。在home目录下的.bashrc或者.profile里加入一行

#你也可以使用自己喜爱的其他终端编辑器EDITOR=vim; export EDITOR

2.1.crontab命令参数及使用示例

usage: crontab [-u user] file crontab [ -u user ] [ -i ] { -e | -l | -r } -e (edit user's crontab) -l (list user's crontab) -r (delete user's crontab) -i (prompt before deleting user's crontab)

创建并编辑当前用户的crontab

crontab -e

列出当前用户的crontab

crontab -l

删除用户linus的crontab

crontab -u linus -i -r

2.2.crontab文件语法详解及示例

当用 crontab -e 编辑当前用户的crontab文件时,首先写入以下内容。

# crontab -eshell=/bin/bashMaiLTO=root@example.comPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin# For details see man 4 crontabs# Example of job definition:# .---------------- minute (0 - 59)# | .------------- hour (0 - 23)# | | .---------- day of month (1 - 31)# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat# | | | | |# * * * * * user-name command to be executed

该文件的前三行代码设置了默认环境。cron守护进程并不提供任何环境。SHELL变量设置当cron任务(命令以及脚本)运行时的shell,MAILTO变量设置cron任务执行结果发送的邮箱,PATH设置去哪些目录下寻找cron任务的命令。注释部分则解释一条cron任务的构成,一条cron任务就是一行,要设置多少条cron任务则写多少行。一条cron任务由七个部分组成,从左到右依次为:

  • 分钟(0-59)

  • 小时(0-23)

  • 天(1-31)

  • 月 (1-12):或者可以使用月份的英文单词的前三个字母,比如jan,feb,mar,apr...

  • 星期(0-6):星期天用0或者7都可以,或者可以使用星期的英文单词的前三个字母,比如sun,mon,tue,wed,thu,fri,sat

  • 用户名称(可以省略)

  • 要执行的命令或者脚本目录

前五个部分的编写注意特殊符号的含义:

  • 如果你想匹配取值范围内的所有值,使用“*”

  • 想匹配某些特殊的值,使用“,”,比如2,4,7就匹配的是2,4以及7。

  • 两个值被“-”连接表示范围,此时匹配的是范围内所有值,包含“-”两边的值,比如4-7匹配的就是从4到7。

  • 想要表达每隔一段时间执行一次任务,使用 “/”, 比如分钟部分中的 “*/10”表示每10分钟运行一次,比如小时部分中的“10-22/2”则表示在早上10点到晚上10点这段时间内,每隔两个小时运行一次。 注意 :当“/”左边的值可以除尽“/”右边的值时,任务才会运行。

例子1:

每天凌晨执行

0 0 * * * root command

例子2:

每周星期天早上五点执行

0 5 * * sun root command

例子3:

每个月的前10天晚上10点开始每隔10分钟执行一次命令

*/10 22 1-10 * * root command

例子4:

从星期一到五,每个小时的第10分钟、第20分钟以及第30分钟都执行一次命令

10,20,30 * * * 1-5 root command

例子5:

从早上10点到晚上10点,每个偶数的小时(比如10点,12点)里每五分钟运行一次命令

*/5 10-22/2 * * * root command

特殊简便写法:

@hourly 代表 0 * * * * ,每个小时运行一次

@daily 代表 0 0 * * * ,每天凌晨运行一次

@weekly 代表 0 0 * * 0 ,每周星期天凌晨运行一次

@monthly 代表 0 0 1 * * ,每个月第一天凌晨运行一次

@yearly 代表 0 0 1 1 * ,每年的头一分钟运行一次

@reboot 重启后执行一次

例子:

每天凌晨运行一次

@daily command

你可以把需要每个小时运行一次的脚本放到/etc/cron.hourly目录下,cron守护进程会每个小时都运行一次。

2.3.限制可以使用cron的用户

在/etc/目录下,可能默认会有cron.allow以及cron.deny文件,也可能没有,没有的情况下可以自己创建,cron.allow文件包含了可以使用cron的用户名,cron.deny文件包含了不可以使用cron的用户名。两个文件中每个用户名占一行,并且不允许出现空格。

root用户在任何情况下都可以使用cron。

假如cron.allow存在,则只有列在这个文件中的用户名可以使用cron,这时候cron.deny被忽视。

假如cron.allow不存在,则列在cron.deny文件中的用户名不可以使用cron。

3.用anacron执行周期性的任务

anacron程序可以周期性的执行任务,但具体执行时间并不确定。可以每天、每周、每个月周期性的执行任务。当anacron的配置文件发生改变时,下一次anacron运行时会检查到配置文件的变化。anacron的配置文件为/etc/anacrontab,编辑需要root权限,默认以下内容:

# See anacron(8) and anacrontab(5) for details.SHELL=/bin/shPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=root# the maximal random delay added to the base delay of the jobsRANDOM_DELAY=45# the jobs will be started during the following hours onlySTART_HOURS_RANGE=3-22#period in days delay in minutes job-identifier command1  5  cron.daily    nice run-parts /etc/cron.daily7  25  cron.weekly    nice run-parts /etc/cron.weekly@monthly 45  cron.monthly   nice run-parts /etc/cron.monthly

可以看到前三行设置了默认环境,RANDOM_DELAY变量设置了最大延迟执行时间,START_HOURS_RANGE变量设置了anacron任务执行的时间范围,默认在每天的3点到22点之间。最后三行则设置了三条默认的anacron任务,分别是每天执行,每周执行,每月执行。

3.1.anacron文件语法

观察前面三条默认的anacron任务,可以看到一条anacron任务分为四个部分,从左到右依次为:

  • 周期(天):设置任务执行的频率,以 天数 为单位,写1则代表每天执行,写3则代表每3天执行,可以使用特殊符号“@”, @daily 代表每天, @weekly 代表每周, @monthly 代表每月。

  • 延迟时间:设置任务的延迟时间,以 分钟 为单位,比如写5,则当anacron启动后,anacron等待5分钟就会执行该任务。设置延迟时间是为了当机器启动时不会因为执行很多anacron任务而过载。

  • 任务标识:其目的是识别消息,日志文件和执行特殊操作。

  • 要执行的命令

在/etc/anacrontab中的三条默认anacron任务中,nice命令用来调整后面命令的优先级,run-parts命令用来执行设置的目录下的所有脚本,就是说这三条任务分别每天,每周,每月执行/etc/cron.daily,/etc/cron.weekly,/etc/cron.monthly目录下的脚本。所以我们不用自己往/etc/anacrontab中添加anacrontab任务,而只需把脚本放到相应的目录下,anacron就会周期性的执行这些脚本了。

3.2.anacron如何运行

既然anacron不是守护进程,那它是如何做到周期性执行任务的呢?在Centos7下,cron会运行/etc/cron.d/0hourly,在/etc/cron.d/0hourly文件里,有一条cron任务是这样的:

01 * * * * root run-parts /etc/cron.hourly

这条cron任务会运行/etc/cron.hourly目录下的所有脚本,其中有一个名为 0anacron 的脚本,该脚本则会在合适的时间运行anacron,anacron则会检查/etc/anacrontab,在合适的时间分别运行/etc/cron.daily,/etc/cron.weekly,/etc/cron.monthly目录下的脚本。

什么是Linux系统

Linux是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统,使用Linux能运行主要的Unix工具软件、应用程序和网络协议。

关于如何在linux中定期执行命令问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网操作系统频道了解更多相关知识。

--结束END--

本文标题: 如何在linux中定期执行命令

本文链接: https://www.lsjlt.com/news/256312.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 如何在linux中定期执行命令
    如何在linux中定期执行命令?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.cron,crontab以及anacron的关系cron是大多数linux发行版都自带的守护...
    99+
    2023-06-09
  • 如何在linux上定期执行命令、脚本
    今天就跟大家聊聊有关如何在linux上定期执行命令、脚本,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。人类把时间做了切割,想象一条笔直的线永远向前,本来这条直线上什么都没有,但是人类...
    99+
    2023-06-28
  • 在linux上定期执行命令、脚本(cron,crontab,anacron)
    人类把时间做了切割,想象一条笔直的线永远向前,本来这条直线上什么都没有,但是人类根据时间的长短(单位)在这条直线上做了密密麻麻的标记(世纪-年-月-日-时-分-秒-纳秒......),通过这样的方式历史上的每一个时刻都能...
    99+
    2022-06-04
    linux 定期执行命令 linux cron crontab anacron
  • java在linux本地如何执行shell命令
    这篇文章主要讲解了“java在linux本地如何执行shell命令”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java在linux本地如何执行shell命令”吧!一.以springboot...
    99+
    2023-06-29
  • linux如何停止正在执行的命令
    在Linux中,可以使用以下方法停止正在执行的命令:1. 使用Ctrl+C组合键:这是最常用的方法。在终端中按下Ctrl+C组合键,...
    99+
    2023-09-07
    linux
  • 怎么在Linux中使用crontab命令定时执行任务
    怎么在Linux中使用crontab命令定时执行任务?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。crontabcron是一个linux下 的定时执行工具,可以在无需人工干...
    99+
    2023-06-09
  • linux下如何执行shell命令
    这篇文章将为大家详细讲解有关linux下如何执行shell命令,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。linux下执行shell命令有两种方法 在当前shell中执行shell命令在当前s...
    99+
    2023-06-09
  • 在Laravel中如何执行Shell命令
    这篇文章主要介绍在Laravel中如何执行Shell命令,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!shell_exec() 和 exec() 都可以执行 shell 命令。如果你的命令不知道因为什么原因而崩溃,你...
    99+
    2023-06-21
  • 在docker中执行linux shell命令的操作
    在docker中执行shell命令,需要在命令前增加sh -c,例如: docker run ubuntu sh -c 'cat /data/a.txt > b.txt' 否则,指令无法被正常解析。 补充...
    99+
    2022-06-03
    docker linux shell命令 执行shell
  • 怎么在dos命令行中执行cd命令
    今天就跟大家聊聊有关怎么在dos命令行中执行cd命令,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。显示当前目录名或改变当前目录。 CHDIR [/D] [drive:][path] ...
    99+
    2023-06-08
  • 怎么在dos命令行中执行for命令
    这期内容当中小编将会给大家带来有关怎么在dos命令行中执行for命令,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。for帮助文档对一组文件中的每一个文件执行某个特定命令。 FOR %variable IN...
    99+
    2023-06-08
  • Linux中如何重复执行历史命令
    这篇文章主要为大家展示了“Linux中如何重复执行历史命令”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux中如何重复执行历史命令”这篇文章吧。在正式开始之前,我们先随便执行几条命令,便于...
    99+
    2023-06-15
  • Linux中如何连续执行多条命令
    这篇文章主要为大家展示了“Linux中如何连续执行多条命令”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux中如何连续执行多条命令”这篇文章吧。每条命令使用";"隔开,...
    99+
    2023-06-09
  • &&、()、||是如何决定Linux命令的执行顺序
    这期内容当中小编将会给大家带来有关&&、()、||是如何决定Linux命令的执行顺序,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Linux系统中Linux命令:&&、()...
    99+
    2023-06-28
  • Linux环境使用crontab命令设置定时周期性执行任务【含php执行代码】
    本文实例讲述了linux环境使用crontab命令设置定时周期性执行任务。分享给大家供大家参考,具体如下: 从linux帮助中查看crontab命令有以下参数: -u username:指定用户操作定时器 -e:编辑...
    99+
    2022-06-04
    Linux crontab 设置 定时 周期性 执行任务
  • java如何执行(命令执行)
    执行java文件方法:(相关视频教程推荐:java视频教程)使用环境:jdk1.6文件目录:javac *.java会生成对应的*.class文件java *.class就可以执行了,.class可以省略t.java中是没有包的public...
    99+
    2019-10-16
    java
  • 如何使用linux的crontab命令执行其它命令
    这篇“如何使用linux的crontab命令执行其它命令”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起...
    99+
    2022-10-19
  • 怎么在Linux系统中重复执行命令
    今天就跟大家聊聊有关怎么在Linux系统中重复执行命令,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。普通的重复执行命令实际操操作过程中,经常会遇到重复执行同一命令,以观察其结果变化的...
    99+
    2023-06-13
  • 如何在Linux中的特定时间运行命令
    有一天,我使用 rsync 将大文件传输到局域网上的另一个系统。由于它是非常大的文件,大约需要 20 分钟才能完成。我不想再等了,我也不想按 CTRL+C 来终止这个过程。我只是想知道在 linux 操作系统中...
    99+
    2022-06-04
    linux 命令 linux 特定时间运行命令
  • shell命令行模式中如何执行mongo命令
    小编给大家分享一下shell命令行模式中如何执行mongo命令,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作