crontab+flock实现定时检测进程状态并重启

Crontab

*/1 * * * * flock -xn ./flock.lock -c "php -r \"sleep(120);\"" && rm ./flock.lock

注:我们担心常驻进程(死循环)运行时出现不知名错误,而导致进程中断执行,通过crontab+flock保证常驻进程的中断之后重启

Flock

flock -xn ./flock.lock -c "php -r \"sleep(20);\"" && rm ./flock.lock

这条命令,第一次执行,可以发现几点

  1. 命令行会等待20s然后结束

  2. 命令回车执行之后,生成了flock.lock文件

  3. 20s等待完毕之后flock.lock文件被删除

  4. 在这20s等待期间,ps -ef | grep php会出现两个相关进程,一个是php执行进程,一个是flock锁进程

  5. 在这20s等待期间,重复运行该命令,进程数量并不会增加

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

答: 前段命令会等待 -c 后面的命令执行结束,即: php -r "sleep(20);"

Q2: 为什么会生成flock.lock文件?

答: flock 会先创建一个文件,再获取该文件的相关锁(独占锁、共享锁、排他锁)

Q3:为什么flock.lock文件被删除?

答: 前面的命令执行成功,执行下一步命令

关于&&的用法请阅读《Shell 基本运算符》

Q4:为什么会有两个进程?

答: flock进程在等待php进程执行完成

Q5: 为什么相关进程数量并不会增加

答: 第一个flock 进程已经拿到了文件flock.lock的独占锁,后面重复执行命令,获取锁失败(与flock -n的参数指令相关),执行失败后,自然不会进行下一步

注:flock.lock文件可不删除,flock只会获取文件锁,跟文件是否存在无关(文件不存在会自动创建文件)

转载于:https://my.oschina.net/querying/blog/1931682

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值