在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在内所有用户的定时任务,每个用户的所有定时任务保存在该目录下的与用户同名的文件
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定时任务的脚本,文件中包含了编辑的shell脚本实例,以及linux如何去设置定时器,如何给脚本赋权限。
详细介绍了Linux定时任务的shell代码,需要使用定时任务的可以参考下
Linux定时任务系统Cron入门,详细介绍LINUX的crontab和设置。
1.提权环境,信息收集(SUID,定时任务,可能漏洞,第三方服务应用等) 2.最新相关漏洞要明确(关注点),二次开发相关脚本学会展望(四个脚本) 3.本地 se
基于workerman做的Linux定时任务控制台(比linux自带的cronjob增加秒级功能).zip 基于workerman做的定时任务控制台,Linux 定时任务控制,比linux自带的cronjob增加秒级功能。 运行环境 php >= 7.0 php扩展需要 pcntl...
linux 定时任务 crontab 详细解释 cron服务提供crontab命令来设定cron服务
linux定时任务 很简单 容易操作linux定时任务 很简单 容易操作linux定时任务 很简单 容易操作linux定时任务 很简单 容易操作linux定时任务 很简单 容易操作
如何在linux给oracle做定时备份一直是我们头疼的问题,这次学习了crontab命令个oracle做备份的方法,当然也可做其他的任务
opencron一个功能完善真正通用的linux定时任务调度定系统,满足多种场景下各种复杂的定时任务调度,同时集成了linux实时监控,webssh,提供一个方便管理定时任务的平台.
系统定时任务和用户定时任务,定时任务脚本编写,用户定时任务权限问题。合适linux学习及复习
本篇文章主要介绍了linux 定时任务,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
linux 计划任务cron--教你怎么定时执行的指令
这种自动推送的方式也只有在页面受访时才会被提交至百度,只可惜百度对个人博客url的收录速度确实无法跟Google比呀,因此编写Python脚本通过站点的 sitemap.xml 与Linux定时任务实现 主动推送 的自动化。具体步骤...
linux下定时执行计划任务.txt linux下定时执行计划任务.txt linux下定时执行计划任务.txt linux下定时执行计划任务.txt
NULL 博文链接:https://lym6520.iteye.com/blog/2024279
主要介绍了Linux定时任务的设置及 crontab 配置指南,需要的朋友可以参考下
本篇文章主要介绍了使用python crontab设置linux定时任务,具有一定的参考价值,有需要的可以了解一下。
做了个数据库的备份脚本,顺便系统得学习一下Linux下定时执行脚本的设置。Linux下的定时执行主要是使用crontab文件中加入定制计划来执行,设置比Windows稍微复杂一些(因为没有图形界面嘛),但是也不是非常复杂,基本...
Linux-centos7下添加用户定时任务,下述步骤均为自己实际操作,并成功执行,图文并茂,易于操作。