Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查php脚本是否仍在运行_Php_Cron_Windows Shell - Fatal编程技术网

检查php脚本是否仍在运行

检查php脚本是否仍在运行,php,cron,windows-shell,Php,Cron,Windows Shell,我有一个脚本可以监听jabber服务器并相应地做出响应。虽然它不应该停止,但昨晚它停止了。现在,我想每分钟运行一次cron作业,检查脚本是否正在运行,如果没有,则启动它 问题是,如何检查特定脚本是否仍在运行 已经发布了一些解决方案,但这些都是针对Linux的,而我正在寻找一个Windows解决方案。有什么想法吗?谢谢。对于脚本来说,一个快速而肮脏的解决方法是使用设置为当前时间戳的日期列更新数据库中的一行。让cron second脚本检查此行的时间戳是否是最近的。我通常会这样做: 创建状态目录,例

我有一个脚本可以监听jabber服务器并相应地做出响应。虽然它不应该停止,但昨晚它停止了。现在,我想每分钟运行一次cron作业,检查脚本是否正在运行,如果没有,则启动它

问题是,如何检查特定脚本是否仍在运行


已经发布了一些解决方案,但这些都是针对Linux的,而我正在寻找一个Windows解决方案。有什么想法吗?谢谢。

对于脚本来说,一个快速而肮脏的解决方法是使用设置为当前时间戳的日期列更新数据库中的一行。让cron second脚本检查此行的时间戳是否是最近的。

我通常会这样做:

  • 创建状态目录,例如:/data/status/
  • 在我的脚本中,让它检查状态文件是否存在
  • 如果它确实存在,请退出脚本
  • 如果不存在,请继续此过程
  • 然而,这里有一个问题:若脚本死了,并且并没有删除状态文件,那个该怎么办

    您可以像这样添加一点保存检查:

    $i++
    if( $i%100 == 0)
        file_put_contents("status.txt","ping");
    
  • 每分钟更新一次状态文件
  • 对于每个cron启动,检查状态文件是否最后更新,例如:10或30分钟前(我们可以假设我们的cron脚本为die),我们可以启动cron脚本

  • 我也有同样的问题,我用这个代码解决了:

    file_put_contents("status.txt","ping");
    
    我把它放在脚本的循环中

    因此,我检查文件的最后修改日期,以查看脚本是否处于活动状态

    要避免硬盘过载,您可以执行以下操作:

    $i++
    if( $i%100 == 0)
        file_put_contents("status.txt","ping");
    
    当$i==100、200或300等时,这将写入文件


    这是一个变通办法

    我可以将该变通办法用作最后手段。是否有任何Windows shell脚本可以完成这项工作?Windows shell脚本不如JCL对用户友好,这说明了一些问题,因此我恐怕无法在这方面帮助您。您可以尝试查看PowerShell,因为这似乎很有用。这比更新数据库中的时间戳字段有多高效?我认为更新数据库更好,因为它有自己的锁定机制。然而,如果我们依赖一个文件,我们可能会陷入死锁。如果我错了,请纠正我。我在笔记本上运行了许多脚本。要从我的桌面访问mysql,我必须安装PHP。当我只处理一个文本文件时,这就变得不必要了。但是,每个病例都应单独处理。