php – 如何防止脚本的多个实例?
我有PHP脚本,我必须在Linux和Windows服务器上运行. 对于我的Windows环境,这些脚本将使用cron(在linux上)和Windows调度程序(或其他,我现在不关心)进行调度. 但是,某些脚本可能需要几分钟才能完成.我只想防止调度程序(cron或windows的一个)在上次启动它之前启动相同的脚本. 我不知道该怎么做.. 也许有一个虚拟文件上的羊群可以做到这一点,但我不知道该怎么做. 我在这些服务器上也有一个MySQL数据库.我想可能在数据库端使用锁.
如果脚本名称在表中,那么我可以阻止它运行. 但是,在一个事务中,有没有办法让其他连接看到未提交的数据?如果有,怎么样? 如果无法使用回滚的话,我还想过在行上使用锁.
但我的主要问题是MysqL.选择FOR UPDATE挂起,直到释放上一个锁或者超过50秒超时(innodb_lock_wait_timeout变量)为止.我希望MysqL当场告诉我我的行被锁定而不影响整个数据库.这是因为innodb_lock_wait_timeout变量是全局变量(不是会话变量). 或者我应该让脚本挂起50秒没有任何问题? 什么是最好的方法,因为我是一个PHP新手,我不想在服务器上造成任何问题. 也许我有另一个选项,我没有看到.. 解决方法: 我使用…套接字解决了这个问题.你可以启用PHP_sockets扩展然后尝试它.这是代码示例:
特定$port上的绑定套接字是concurent执行的安全操作.操作系统将确保没有其他进程将套接字绑定到同一端口.您只需要检查返回值. 如果脚本崩溃,则操作系统将自动解除绑定端口. 这也可以用于任何语言.我已经在perl和基于PHP的项目上测试了它.即使我们错误地在crontab中添加了两次脚本,它也会停止并行执行. (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |