crontab+flock实现定时检测进程状态并重启
2018-08-21 19:06
681 查看
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
这条命令,第一次执行,可以发现几点
命令行会等待20s然后结束
命令回车执行之后,生成了
flock.lock文件
20s等待完毕之后
flock.lock文件被删除
在这20s等待期间,
ps -ef | grep php会出现两个相关进程,一个是php执行进程,一个是flock锁进程
在这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只会获取文件锁,跟文件是否存在无关(
文件不存在会自动创建文件)
相关文章推荐
- crontab根据定时检测程序状态,重启程序
- 用Shell脚本定时监控Linux下的进程状态并自动重启
- Linux系统利用Crontab命令实现定时重启
- Linux系统利用Crontab命令实现定时重启
- 使用 Perl 检测 系统进程,实现进程意外退出重启
- Linux系统利用Crontab命令实现定时重启
- Linux系统利用Crontab命令实现定时重启
- 定时检测服务状态脚本实现
- Linux系统利用Crontab命令实现定时重启
- Linux VPS主机利用Crontab实现定时重启任务
- Linux 文件锁flock 实现两个进程相互监听存活状态
- Linux系统利用Crontab命令实现定时重启
- Linux定时检测tomcat状态,宕掉时自动重启
- 【小工具】shell检测进程状态异常自动重启(补OOM检测重启)
- Linux系统利用Crontab命令实现定时重启
- 利用定时任务实现嵌入式下网卡状态检测
- spring3整合quartz2,实现动态添加、修改、暂停、重启定时任务
- linux使用crontab实现PHP执行计划定时任务
- 订单支付成功,检测本地数据库是否同步,定时查看本地订单状态
- linux使用crontab实现PHP执行定时任务