Linux anacron 定时任务如果服务器关机或者无法运行任务,定时任务就不会执行,服务器恢复后,定时任务不会执行没有执行的定时任务 。这种场景下可以使用anacron命令,它与crond功能相同,增加了执行被跳过任务的功能 。一旦服务器启动,anacron就会检查配置的定时任务是否错过了上一次执行,如果有,将立即运行这个任务,且只运行一次(不管错过了多少个周期) 。
也就是说, anacron 是用来保证由于系统原因导致错过的定时任务可以在系统正常后执行的服务 。
anacron命令可以使用 anacron 命令来管理 anacron 服务,语法格式如下:
anacron [options] [job] ...anacron -T [-t anacrontab-file]
options选项:
- -s:串行调用任务
- -f:强制执行任务,忽略设置的周期
- -n:没有delay执行任务,隐含调用了-s参数
- -d:把信息输出到标准输出设备和系统日志中
- -q:禁止向标准输出发送消息,只能和-d选项配合使用 。
- -u:更新时间戳但不执行任务
- -V:打印版本信息
- -h:打印帮助信息
- -t <file> :使用指定的配置文件,忽略默认的/etc/anacrontab文件 。
- -T:Anacrontab测试
- -S <dir>:指定存放timestamp文件的路径
anacron执行过程下面来介绍一下anacron的执行过程:
1、根据脚本需要执行的频率,将脚本安装到/etc/cron.[hourly|daily|weekly|monthly] 目录中:
/etc/cron.hourly/etc/cron.daily/etc/cron.monthly/etc/cron.weekly
2、crond 服务会执行/etc/cron.d/0hourly 中指定的cron 任务,【Linux cron定时介绍】
$ cat /etc/cron.d/0hourly# Run the hourly jobsSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=root01 * * * * root run-parts /etc/cron.hourly
每小时运行一次 run-parts 程序,而 run-parts 程序执行 /etc/cron.hourly 中的所有的shell脚本 。/etc/cron.hourly 目录中包含 0anacron 脚本:
$ ls /etc/cron.hourly0anacronmcelog.cron
3、 0anacron 脚本通过 /etc/anacrontab 配置文件来运行anacron程序 。$ cat /etc/anacrontab# /etc/anacrontab: configuration file for anacron# 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 daysdelay in minutesjob-identifiercommand15cron.dailynice run-parts /etc/cron.daily725cron.weeklynice run-parts /etc/cron.weekly@monthly 45cron.monthlynice run-parts /etc/cron.monthly
- RANDOM_DELAY=45 :表示最大随机延迟时间为45分钟 。
- START_HOURS_RANGE=3-22 : 执行的时间范围为03:00—22:00
anacron的监测周期为每天、每周和每月,每天执行一次/etc/cron.daily 目录中的程序,每周执行一次 /etc/cron.weekly 中的程序,每月执行一次 /etc/cron.monthly 中的程序 。
anacron不能在指定某个时间运行某个程序,它的设计目的是在特定的时间间隔运行某个程序,例如每天,每周日或者每月第一天的03:00运行某个程序 。如果因为某种原因(关机或者服务器异常)没有执行,anacron会在服务器正常后运行一次错过的执行 。
那么,anacron 是如何判断这些定时任务错过了执行呢?
其实是通过读取上次执行 anacron 的时间记录文件,通过两个时间的差值判断是否超过指定间隔时间(1天、1周和1月) 。
/var/spool/anacron/ 目录中的 cron.[daily|weekly|monthly] 文件记录了上一次执行 cron任务 的时间:
$ ls /var/spool/anacron/cron.dailycron.monthlycron.weekly$ cat /var/spool/anacron/cron.daily20211123
cron表达式应用前面介绍了在Linux中通常用 crond 服务来实现任务定时执行,在很多场景都会用到定时任务,比如定时提醒,定时发送邮件等 。比如Python中可以使用APScheduler库执行定时任务,JAVA可以使用Quartz框架实现,Go语言使用 github.com/robfig/cron 包 。在持续测试平台Jenkins中经常会配置定时执行任务,下面简单介绍一下Jenkins定时构建配置方法 。
Jenkins定时构建在配置Jenkins任务时,构建定时任务主要有两种形式:
- 一种是配置周期触发(Build periodically),在特定时间进行自动触发测试流程 。
- 第二种是Poll SCM:定时检查源码变更,如果有更新就checkout新的代码下来,然后执行构建动作 。
推荐阅读
- Linux之killall命令
- 如何将不同linux服务器的目录内容进行双向同步
- PwnKit漏洞曝光:所有主流Linux发行版本均受影响
- Linux IO缓存落盘
- Linux 网络命令知多少
- FFmpeg之Linux下编译与调试
- Linux之date命令
- 微软发布全新Linux DirectX驱动程序,升级Win11/10 WSL子系统内核
- Linux中是谁占用了我的端口
- Linux下使用tail查找日志文件关键词高亮显示