cat /etc/redhat-release
看到操作系统的版本是CentOS Linux release 7.6.1810 (Core)
,uname -r
可以看到内核版本是3.10.0-957.21.3.el7.x86_64
参考的博客有:
1.《Linux anacron命令用法详解》
2.《详解anacron 命令》
3.《Anacron的用法》
4.《shell脚本实现文件锁功能》
5.《 shell案例解决之flock示例》
anacron
anacron
的设计目标是处理可能不会持续运行的系统上的任务,一些在/etc/crontab
里的定时任务因为一些情况(比如关机)而错过定时执行的时刻,那么这些任务就有可能以后再执行,而为了避免因这些特殊情况引发的定时任务执行次数减少,可以将这个任务放在/etc/anacrontab
里。在开机启动时候能够自动延时执行,或者使用anacron -s
手动触发。
/etc/anacrontab
有anacron
的配置文件,格式如下:
period delay job-identifier command
period:任务执行的时间间隔,可以是 daily(每日)、weekly(每周)或 monthly(每月)。
delay:任务启动前的延迟时间(以分钟为单位)。这可以防止系统刚刚启动时就执行任务。
job-identifier:任务的唯一标识符,用于确保每个任务只运行一次。
command:要执行的实际命令或脚本。
我的系统里边,/etc/anacrontab
里边默认内容如下:
# /etc/anacrontab: configuration file for anacron# See anacron(8) and anacrontab(5) for details.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
START_H0URS_RANGE:表示延时任务只能在这段时间内执行
RANDOM_DELAY:最大随机廷迟,会在0~RANDOM_DELAY之间生成一个随机值(这里使用ranDelay,这里是我自己随意起的一个名字),然后就是ranDelay+delay之后执行程序。
1 5 cron.daily nice run-parts /etc/cron.daily
就表示每天在START_HOURS_RANGE
(在此处是3点至22点之间),间隔开机ranDelay+5分钟之后执行程序。
/etc/cron.d/0hourly
记录每小时的计划任务,可以看出里边默认有一条语句:01 * * * * root run-parts /etc/cron.hourly
。这条语句就是说明了每小时第1分钟以/etc/cron.hourly中脚本执行任务
。
flock
在A终端
执行flock -xn "/tmp/txt.lock" -c "/shelllearn/flocktest.sh"
使用/tmp/txt.lock
来让/shelllearn/flocktest.sh
只有一个实例
然后在B终端
再次flock -xn "/tmp/txt.lock" -c "/shelllearn/flocktest.sh"
,发现立马就退出了,这表明锁文件还没有被释放。
此文章为8月Day 3学习笔记,内容来源于极客时间《Linux 实战技能 100 讲》。