linux定时任务crontab文件锁flock问题

这几天linux的定时任务不运行,各种找原因,最终是因为文件锁的问题,自己总结一下,也希望能帮助其他小伙伴。

如果你的crontab还不熟悉可以参考:linux定时任务crontab

下面是我的定时任务:

*/1 * * * * flock -n /tmp/timing_pub.lock /data/server/php/bin/php /data/server/www/web/app/script/index.php article timing_pub >> /tmp/timing_pub.log

使用linux flock 文件锁实现任务锁定,那么flock又是怎么使用的呢?

语法:

flock [-sxun][-w #] fd#

flock [-sxon][-w #] file [-c] command

参数:

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

脚本单独执行没有问题,定时任务写法也没有问题,那为啥没有实行呢?参看一下进程吧

[web@BJ-ZB-ZCBNGINX-98-21 tmp]$ ps -ef | grep '/tmp/timing_pub.lock'
web       24844  24207  0 14:01 pts/0    00:00:00 grep /tmp/timing_pub.lock
web       59942      1  0 Jun09 ?        00:00:00 flock -n /tmp/timing_pub.lock /data/server/php/bin/php /data/server/www/web/app/script/script.php article timing_pub
web      116389      1  0 Jun16 ?        00:00:00 flock -n /tmp/timing_pub.lock /data/server/php/bin/php /data/server/www/web/app/script/script.php article timing_pub
web      186384 186380  0 Jun25 ?        00:00:00 /bin/sh -c flock -n /tmp/timing_pub.lock /data/server/php/bin/php /data/server/www/web/app/script/script.php article timing_pub >> /tmp/timing_pub.log
web      186386 186384  0 Jun25 ?        00:00:00 flock -n /tmp/timing_pub.lock /data/server/php/bin/php /data/server/www/web/app/script/script.php article timing_pub

 发现有多个进程,先杀掉进程 kill 116389 等等再说。结果还是不执行,怎么回事呢?

/tmp/timing_pub.lock已经被锁了,将 /tmp/timing_pub.lock 的文件删除即可。

终于恢复正常了,瞬间心情放松了。

flock -n 如果没有立即获得锁,直接失败而不是等待。至于为啥会有多个进程就不太明白了,欢迎大神留言指点。

你可能感兴趣的:(linux,#crontab,linux)