crontab 任务进程锁 Flock

当crontab 里跑一个运行时间不确定的任务,如有时需要30秒完成,有时需要5分钟完成,而在定时任务里我是设定每1 分钟运行一次。这样就容易引起上次任务还没跑完又开始跑了。这时可以用进程锁来运行。

crontab 任务进程锁 Flock

如下面例子:

1
*/1 * * * * /usr/bin/flock -xn -w 60 /var/run/test.lock -c "/home/root/tmp/gotest/gohl >> /home/root/tmp/logs/gotest.log"

注意:-c 后面跟的命令要用双引号

Flock 一般格式:

1
2
flock [-sxun][-w #] fd#
flock [-sxon][-w #] file [-c] command...

常用选项:

1
2
3
4
5
6
7
8
9
-s, --shared :获得一个共享的锁。
-x, --exclusive :获得一个独占的锁。
-u, --unlock :移除一个锁,通常是不需要的,脚本执行完后会自动丢弃锁。
-n, --nonblock :如果没有立即获得锁直接失败而不是等待。
-w, --timeout :如果没有立即获得锁就等待指定的时间。
-o, --close :在运行命令前关闭文件的描述符。用于如果命令产生子进程时会不受锁的管控。
-c, --command :在shell中运行一个单独的命令。
-h, --help :显示帮助。
-V, --version :显示版本。

删除锁

当出现意外情况退出时,需要手动删除进程锁,只需删掉对应的锁文件 .lock 即可。

本文网址: https://pylist.com/topic/120.html 转摘请注明来源

Suggested Topics

Leave a Comment