flock防止crontab重复执行脚本

经常会有crontab进程会执行完,又起个进程,造成错误。
使用linux flock 文件锁实现任务锁定,解决这个问题

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

文件锁使用独占锁,非阻塞模式 如果锁定则失败不等待。参数为-xn

* * * * * flock -xn /tmp/run.lock -c 'php /home/run.php >> /home/run.log'  

阻塞模式

* * * * * flock -x /tmp/run.lock -c 'php /home/run.php >> /home/run.log'  

你可能感兴趣的:(Linux)