当前位置: 首页 > 后端技术 > PHP

linuxcrontab学习

时间:2023-03-29 23:40:20 PHP

crontab在使用cron的时候,我们经常会因为某个命令运行的时间太长,在命令再次启动的时候出现多个进程。可以使用flock,比如:*/1****flock-xn/opt/app/nginx/test_repo/app/tasks/checkPaymentUrl.lock-c'sudo-uapachephp/opt/app/nginx/test_repo/app/consolePaymentcheckPaymentUrl>>/dev/null2>&1'当多个进程可能对同一个数据进行操作时,这些进程需要保证没有其他进程也在操作,以免损坏数据。通常,这样的进程会使用“锁文件”,即创建一个文件来告诉其他进程它正在运行,如果检测到该文件存在,则认为有进程在运行数据工作。问题是如果进程不小心挂掉,锁文件没有清理,只能由用户手动清理。参数-s,--shared:获取共享锁。在面向某个文件的FD上设置共享锁但锁未释放期间,其他进程试图在面向该文件的FD上设置排他锁。请求失败。但是,其他进程在指向该文件的FD上设置共享锁的请求将会成功。-x,-e,--exclusive:获取独占锁,或者写锁,这是默认的。-u,--unlock:手动释放锁。一般来说,没有必要。FD关闭时,系统会自动解锁。当一些脚本命令需要异步执行而一些可以同步执行时使用该参数。-n,--nb,--nonblock:非阻塞模式,当获取锁失败时,返回1而不是等待。-w,--wait,--timeoutseconds:设置阻塞超时时间,当超过设定的秒数时,退出阻塞模式,返回1,继续执行后面的语句。-o,--close:表示在命令执行前关闭设置锁的FD,使该命令的子进程不持有锁。-c,--command命令:在shell中执行以下语句。例crontab使用flock防止重复执行023***(flock-xn./test.lock-c"sh/root/test.sh")#-n为非阻塞模式