Linux命令学习之crontab

简介: crontab文件包含送交cron守护进程的一系列作业和指令。每个用户可以拥有自己的crontab文件;同时,操作系统保存一个针对整个系统的crontab文件,该文件通常是/etc/crontab,而这个文件只能由系统管理员来修改。

crontab文件包含送交cron守护进程的一系列作业和指令。每个用户可以拥有自己的crontab文件;同时,操作系统保存一个针对整个系统的crontab文件,该文件通常是/etc/crontab,而这个文件只能由系统管理员来修改。


用户的crontab文件存放在 /var/spool/cron/USERNAME # crontab -e -u USERNAME


a、每一行定义一个周期性任务,共6个字段。


b、此处的环境变量不同于用户登录后获得的环境,因此建议命令使用绝对路径。


c、执行结果会发送邮件给当前用户。

2018080314533667.png星号(*)匹配所有有效的值。


短横线(-)表示范围连续取值。


逗号(,)表示离散取值。


正斜线(/)指定间隔频率。例如,0-59/2 在分钟字段表示每两分钟。



*/5 * * * * 每5分钟执行一次

3 * * * * 每小时的第3分钟执行一次

3 4 * * 5 每周5的4点3分执行一次

5 6 7 * * 每月的7号的6点5分执行一次

7 8 9 10 * 每年的10月9号8点7分执行一次

9 8 * * 3,7 每周3和周日的8点9分

0 8,20 * * 3,7 每周3和周日的8点和20点执行一次

0 9-18 * * 1-5 周一到周五的9-18点,即工作时间内的每小时

0 7 25 12 * 每年的12月25号7点执行一次

20180803132504786.png---------------------------------------update 2020年3月17日13:45:52----------------------------------------


在实际运用crontab 启动程序的时候经常会遇到一结果问题就是,某脚本程序运行一次时间小于30mins,为了安全起见将脚本的运行频率调节到每一小时执行一次,这样兼顾了时效性,也确保了安全性。 可是如果某次程序由于执行时间超过了30mins。就不能保证上次执行完,会有double run的问题,crontab的运行时异步执行的,那如何保证crontab的脚本执行不出现double run的情形呢?


在inux中借助lockf机制,保证只有一个任务进程在执行。

lockf –help
-k 锁定文件,如果当前文件被锁,则输出 lockf:/tmp/create/lock :already locked
-s 锁定文件,不输出任何信息 silent
-t second :超时时间,超时就退出

应用示例:

lockf -s -t 0 /log/tmp.lock a.sh

先判断/log/tmp.lock 文件是否被锁,被锁则立即退出,否则将会执行后面的脚本。


第一次运行会给/log/tmp.lock文件上锁,并执行后面的命令,(如果不存在则创建)


当第二次运行该命令时,/log/tmp.lock文件已经被锁,命令将会直接退出,而不会去执行后面的a.sh 的脚本。


实战:

一、排程对gp的表做vacuum freeze,这个操作的时间不定,由于每次是找出age top 20的表做,如果上一个没跑完下一次又开始,其实找到的大部分都是一样的top 20. 最好的解决方案就是第二次执行的时候一定要等第一次执行完。


解决:

1、使用ps keywords 判断是否还在执行,如果在执行则不进行下一次,否则进行洗一次操作。这个客制化程度高,本文不讨论这种方式。

2、使用flock

这个锁文件可以是任何文件。此处是直接在该目录下touch了一个空文件

*/5 * * * * flock -xn  /gpmaster/scripts/freezeTopTable.sock -c 'sh /gpmaster/scripts/freezeTopTable.sh dbname'

flock的几个参数

-s, --shared:    获得一个共享锁

-x, --exclusive: 获得一个独占锁

-u, --unlock:    移除一个锁,通常是不需要的,脚本执行完会自动丢弃锁

-n, --nonblock:  如果没有立即获得锁,直接失败而不是等待

-w, --timeout:   如果没有立即获得锁,等待指定时间

-o, --close:     在运行命令前关闭文件的描述符号。用于如果命令产生子进程时会不受锁的管控

-c, --command:   在shell中运行一个单独的命令

-h, --help       显示帮助

-V, --version:   显示版本

------------------------------------update 2020年8月15日11:14:27--------------------------

如果希望某个脚本每小时执行一次,应该怎么写?

* */1 * * *

初次写成这个,发现竟然是每分钟都在执行,其实这里出现了一个致命的错误中。

分钟域为每分钟,但是小时域为每间隔1H,这两个时间策略本身自相矛盾,最终以分钟为准,所以它是每分钟执行一次。

正确的写法是:

0/60 * * * *

当前时间是11:20 ,每间隔1H执行,会以当前时间的整点为起始时间计算。20200815111850305.png当前时间是11:20 ,每间隔55mins执行,会以当前时间的整点向后推55mins为起始时间计算。

看这个结果为啥整点还会执行一次呢?事实上这也是一个时间策略冲突的例子。 小时域是* ,所以我整点就可以执行啊,所以crontab就执行了。

所以,“ */n * * * * ”  当 n 不能被 60 整除的时候,就不是:每 n 分钟执行一次。

如果我希望是每天的10点到23点12:20 13:20 该怎么处理呢?

强大的crontab 肯定是可以做到的。20200815113742415.png2020081511380326.png再看一个例子

*代表所有的取值范围内的数字,"/"代表每的意思,"/2"表示每2个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。只要理解了这句话,这个表达式就容易理解。

另外给大家推荐一个好用的crontab检查器

https://crontab.guru/#0_0,12_1_*/2_*

相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
29天前
|
Linux Shell
Linux 10 个“who”命令示例
Linux 10 个“who”命令示例
53 14
Linux 10 个“who”命令示例
|
8天前
|
Linux
linux查看目录下的文件夹命令,find查找某个目录,但是不包括这个目录本身?
通过本文的介绍,您应该对如何在 Linux 系统中查看目录下的文件夹以及使用 `find` 命令查找特定目录内容并排除该目录本身有了清晰的理解。掌握这些命令和技巧,可以大大提高日常文件管理和查找操作的效率。 在实际应用中,灵活使用这些命令和参数,可以帮助您快速定位和管理文件和目录,满足各种复杂的文件系统操作需求。
31 8
|
18天前
|
Ubuntu Linux
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
104 20
|
18天前
|
网络协议 Linux 应用服务中间件
kali的常用命令汇总Linux
kali的常用命令汇总linux
47 7
|
2月前
|
Linux 数据库
Linux中第一次使用locate命令报错?????
在Linux CentOS7系统中,使用`locate`命令时出现“command not found”错误,原因是缺少`mlocate`包。解决方法是通过`yum install mlocate -y`或`apt-get install mlocate`安装该包,并执行`updatedb`更新数据库以解决后续的“can not stat”错误。
37 9
|
2月前
|
监控 网络协议 Linux
Linux netstat 命令详解
Linux netstat 命令详解
|
2月前
|
运维 监控 网络协议
运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面
本文介绍了运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面,旨在帮助读者提高工作效率。从基本的文件查看与编辑,到高级的网络配置与安全管理,这些命令是运维工作中的必备工具。
162 3
|
Linux 开发工具 Shell
|
Shell Linux 数据安全/隐私保护

热门文章

最新文章