`

linux 定时任务

 
阅读更多

 

在linux中,周期执行的任务一般由crond这个守护进程来处理。crond读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为crontab(cron table)

一、crond服务

systemctl start crond           //启动服务

systemctl stop crond           //关闭服务

systemctl restart crond        //重启服务

systemctl reload crond       //重新载入配置

systemctl status crond        //查看服务状态

二、cron在3个地方查找配置文件

1. /var/spool/cron/ 目录下存放包括root在内所有用户的定时任务,每个用户的所有定时任务保存在该目录下的与用户同名的文件

Linux Filesystem Structure
5.11 /var/spool : Spool directories
/var/spool is traditionally used for machine-local data being spooled to or from UNIX subsystems. For example, print jobs are spooled here for delivery to the lineprinter daemon, out-bound mail is spooled for delivery to remote systems, and UUCP files are spooled for transmission to UUCP neighbors. In-bound mail and news are spooled here for delivery to users, and at and cron jobs are spooled for delayed execution by the cron daemon.

2. /etc/crontab 文件负责调度各种管理和维护任务

3. /etc/cron.d/ 目录用来存放任何要执行的crontab文件或脚本

三、crontab命令

crontab [-u username]    //省略用户表表示操作当前用户的crontab
    -e      (编辑工作表)
    -l      (列出工作表里的命令)
    -r      (删除工作表)

 crontab命令操作的实际就是 /var/spool/cron 目录下的文件。crontab -e 进入当前用户的工作表编辑,是常见的 vim界面,每行都是一项任务。任务格式:

minute hour day month dayOfWeek     command
minute:     分钟,0-59整数
hour:       小时,0-23整数
dyay:       日期,0-31整数(如指定月份,则必须是该月有效日期)
month:      月份1-12整数,(或使用英文简写jan、feb)
dayOfWeek:  周几,0-7整数,0或7都代表星期天(或使用英文简写如sun、mon)
command:    执行的命令(可以是系统命令,也可以是脚本文件)

上面定义定时任务执行周期的几项中
星号*    表示所有有效值
短线-    执行一个整数范围
逗号,    指定多个多个固定值
正斜线/  用来指定频率,斜线前表示范围,后面表示频率。如在分钟位置0-29/2 表示在0到29分钟期间每隔2分钟执行一次,也经常配合*使用:*/1

crontab文件注释符号为 #  

四、/etc/crontab文件和/etc/cron.d目录

[root@instance-gc45taul bin]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# 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

 从上面可以看到 /etc/crontab文件中任务比用户定时任务(/var/spool/cron目录下任务)多了一个 user-name字段。因为是全局性的计划任务需要指定执行人。当我们要增加全局性的计划任务一般不直接修改/etc/crontab,而是在/etc/cron.d目录下新增任务文件。比如 /etc/con.d/0hourly内容如下

[root@instance-w6b0iilx cron.d]# cat 0hourly 
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly  //run-parts的作用是执行一个目录下的所有脚本程序

五、cron使用权限

/etc/cron.allow和/etc/cron.deny 控制文件用来限制用户对cron的使用。格式都是每行一个用户,且不允许空格。控制文件被修改无需重启crond服务,因为用户每次添加或删除一项cron任务都会重新读取一遍控制文件。另外,无论控制文件如何设置,root用户都能使用cron

 控制文件生效规则:

1.如果两个文件都不存在,则只用root能使用crontab命令

2.只要有cron.allow存在,则只有cron.allow文件中的用户能使用crontab

3.如果没有cron.allow,只用cron.deny,则除了cron.deny文件以外的用户都能使用crontab

六.anacron

一般linux服务器都是24小时运行的,一般的计划任务是用crontab来实现。但是如果出现因某些原因服务器关机的情况,那么在关闭期间应当执行的计划任务当次就不会执行,这种情况在某些业务场景下是不可接受的。这时候就需要使用anacron来指定计划任务,它会在系统重新开机后,把关机时间内的计划任务执行一次。

anacron命令

anacron [options] [job]
-s:  开始所有jobs,并根据时间戳判断是否开始相应的job
-f:  强制执行,忽略时间戳对比
-n:  立即进行未进行的任务,忽略延迟等待时间
-u:  仅升级相应的时间戳,实际不进行任何工作
job: /etc/anacrontab 文件中定义的各项工作名称

 /etc/anacrontab

此文件为anacron任务的配置文件

[root@instance-w6b0iilx ~]# cat /etc/anacrontab 
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#period in days   delay in minutes   job-identifier   command
1       5       cron.daily              nice run-parts /etc/cron.daily
7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly

 RANDOM_DELAY=45: 设置为anacron任务添加的随机延迟的最大值,单位为分钟,一个anacron任务运行的总延迟时间为 RANDOM_DELAY+BASE_DELAY;

START_HOURS_RANGE=3-22:设置anacron任务执行的时间范围,表示任务只能在这个时间范围内执行

 

anacron任务配置行,每一行对应一个anacron任务,其中:

period in days: 指任务在多少天内执行一次,7表示7天内执行一次,也可以使用@daily、@weekly、@monthly来表示周期

delay in minutes:延迟时间(即上面的BASE_DELAY),单位为分钟

job-identifier:任务标识,这个与/var/spool/anacron/ 目录下的时间戳文件名相一致,anacron通过此标识来获取对应的时间戳判断是否该执行此任务

command:anacron任务执行的内容

 

anacron任务工作流程

以centos6.8为系统背景对相关anacron流程进行描述

/etc/cron.d 目录下有一个0hourly文件,由crond执行这个定时任务,每小时执行一次 /etc/cron.hourly下的所有脚本

[root@instance-w6b0iilx cron.d]# cat 0hourly 
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly //run-parts就是/usr/bin目录下的一个shell脚本用于执行某个目录下的所有

/etc/cron.hourly 目录下只有一个0anacron脚本文件

[root@instance-w6b0iilx cron.hourly]# cat 0anacron 
#!/bin/sh
# Check whether 0anacron was run today already
if test -r /var/spool/anacron/cron.daily; then //判断时间戳文件是否存在
    day=`cat /var/spool/anacron/cron.daily`   //赋值给变量day
fi
if [ `date +%Y%m%d` = "$day" ]; then  //day如果是当前日期,则退出脚本,
    exit 0;
fi

# Do not run jobs when on battery power  //电池模式下不执行anacron任务
if test -x /usr/bin/on_ac_power; then
    /usr/bin/on_ac_power >/dev/null 2>&1
    if test $? -eq 1; then
    exit 0
    fi
fi
/usr/sbin/anacron -s    //执行anacron任务

 /usr/sbin/anacron 会执行/etc/anacrontab 里面的所有anacron任务,/etc/anacrontab默认内容在上文中

 

以anacrontab文件中的cron.daily这个job为例。根据上述描述,anacron的工作流程可以总结为:

1.系统启动后,crond服务执行每小时调度任务/etc/cron.d/0hourly来执行/etc/cron.hourly/0anacron任务

2./etc/cron.hourly/0anacron先判断今天是否执行过anacron任务,随后判断系统是否运行在电池模式,都为否,则执行/usr/sbin/anacron -s命令

3.anacron命令查找 /etc/anacrontab文件,得到cron.daily任务工作间隔为1天

4.anacron命令从/var/spool/anacron/cron.daily文件(此文件两个作用,第一0anacron脚本中判断是否要执行脚本,第二作为cron.daily任务的时间戳文件)中取出此任务最近一次运行时间

5.对比当前时间与文件中读取时间,若差异天数在1天或以上,则准备运行任务

6.在延迟时间后,开始运行相关命令,即执行 /etc/cron.daily目录下所有脚本

7.运行完毕,修改对应时间戳文件为当前文件,结束

分享到:
评论

相关推荐

    Linux定时任务以及脚本编写docx

    本文档将详细介绍如何创建和配置Linux定时任务,以及编写和执行简单的shell脚本。 首先,让我们看看脚本样例1,这是一个用于监控Linux服务器性能的bash脚本。它包含以下几个关键部分: 1. **获取服务器IP地址**:...

    linux定时任务设置

    "Linux 定时任务设置" Linux 定时任务设置是 Linux 操作系统中的一种功能,允许用户设置定时执行某些任务的时间和频率。本文将详细介绍如何在 Linux 中使用 crontab 命令来设置定时任务,并对其格式、参数和使用...

    Linux定时任务1

    Linux定时任务是Linux系统中非常重要的功能,它允许用户或系统自动执行预定的任务,无需人工干预。这在服务器管理和自动化运维中尤其有用。本文将详细探讨Linux定时任务的相关知识点。 首先,程序是预编写的执行...

    linux定时任务.docx

    Linux 定时任务管理 Linux 定时任务是指在指定的时刻执行所需执行的任务,无论是在生活还是工作中,经常会碰到希望在某个时刻执行某个任务的情况,这时候就需要使用定时任务了。由于不能够人工的 24 小时围绕着电脑...

    linux定时任务详细说明.docx

    Linux定时任务是Linux系统中的一种计划任务机制,它允许用户预先设定特定的时间点或周期性地执行特定的命令或程序。在Linux环境下,定时任务主要通过`cron`服务来实现,`cron`是一个守护进程,它会在后台持续运行,...

    Linux定时任务

    详细介绍了Linux定时任务的shell代码,需要使用定时任务的可以参考下

    linux定时任务详细说明.pdf

    Linux定时任务是Linux系统中的一种自动化任务调度机制,允许用户或系统管理员安排任务在特定时间自动执行。在提供的文件“linux定时任务详细说明.pdf”中,主要涉及的是如何配置和管理Linux下的cron服务来执行一系列...

    linux定时任务.pdf

    本文主要讨论两种常见的Linux定时任务工具:`at`和`cron`。 `at`命令用于一次性定时执行任务,适用于那些只需要在未来某一特定时间运行一次的任务。例如,如果你想要在每天晚上12点执行一个名为`test.sh`的shell...

    Linux定时任务之我见

    这篇“Linux定时任务之我见”可能深入探讨了如何在Linux环境下设置和管理这些任务,以便提高效率和可靠性。通过定时任务,我们可以安排脚本或命令在特定时间执行,比如定期备份数据、系统维护或发送提醒邮件。 ...

    基于workerman做的Linux定时任务控制台(比linux自带的cronjob增加秒级功能).zip

    基于workerman做的Linux定时任务控制台(比linux自带的cronjob增加秒级功能).zip 基于workerman做的定时任务控制台,Linux 定时任务控制,比linux自带的cronjob增加秒级功能。 运行环境 php >= 7.0 php扩展需要 pcntl...

    Linux下定时任务,命令启停jar包服务

    Linux 下的定时任务和 jar 包服务管理 Linux 作为一款流行的操作系统,提供了许多强大的功能,其中之一就是定时任务的管理。定时任务允许用户在指定的时间执行特定的命令或程序,从而实现自动化操作。在 Linux 中,...

    opencron一个功能完善真正通用的linux定时任务调度定系统

    《opencron:全面解析Linux定时任务调度系统的强大功能》 在现代IT运维中,定时任务调度系统扮演着至关重要的角色。它能够自动执行预设的任务,如数据备份、日志清理、系统检查等,从而极大地提高了工作效率。今天...

    postgresql数据库定时备份脚本(linux)

    三、Linux定时任务 1. **cron**:Linux的定时任务调度器,可以设置周期性执行特定命令。 2. **crontab**:用户级的cron配置文件,用于定义定时任务。 四、创建PostgreSQL定时备份脚本 1. **脚本内容**:包括使用pg_...

    第64天:权限提升-Linux定时任务&环境变量&数据库1

    1.提权环境,信息收集(SUID,定时任务,可能漏洞,第三方服务应用等) 2.最新相关漏洞要明确(关注点),二次开发相关脚本学会展望(四个脚本) 3.本地 se

    linux 定时任务 crontab 详细解释

    ### Linux定时任务Crontab详解 #### 一、Crontab简介 在Linux系统中,Cron服务是一种用于计划执行任务的工具。它允许用户设置周期性运行的任务,例如自动备份数据、定时发送邮件等。Cron服务的核心是`crontab`命令...

    linux定时任务命令之crontab

    ### Linux定时任务命令之crontab #### Crontab简介 Crontab是Linux系统中一个非常重要的工具,用于在固定时间周期性地执行特定任务。通过crontab,管理员和用户可以设置脚本或命令在指定的时间自动执行,极大地...

    毕业设计:基于python爬虫、linux定时任务的易班自动签到系统基础框架.zip

    【标题】基于Python爬虫和Linux定时任务的易班自动签到系统基础框架是一个典型的结合了网络数据抓取和自动化执行的技术实现。该系统利用Python爬虫技术来模拟用户行为,实现对易班网站的自动签到,再通过Linux系统的...

    linux 定时任务详解

    ### Linux定时任务详解 在Linux系统中,定时任务是一个非常重要的功能,可以帮助用户自动化执行一些周期性的任务,例如定期备份数据、清理日志文件等。Linux中最常用的定时任务工具是`crontab`。 #### 一、crontab...

Global site tag (gtag.js) - Google Analytics