杀死背景php脚本(共享主机)

时间:2011-09-03 02:21:37

标签: php process-control

我创建了一个使用ignore_user_abort()函数在后台运行的脚本。但是,我愚蠢到不插入任何类型的代码来使脚本停止,现在它每30秒发送一次电子邮件......

有没有办法停止脚本?我在共享主机中,所以我无法访问命令提示符,我不知道PID。

4 个答案:

答案 0 :(得分:7)

  

有没有办法停止脚本?我在共享主机中,所以我无法访问命令提示符,我不知道PID。

然后没有。

但是你确定你没有任何shell访问权限吗?即使通过PHP?如果你这样做,你可以尝试......

<?php

print `ps -ef | grep php`;

...如果你能从中识别出那个过程......

<?php

$pid=12345; // for example.
print `kill -9 $pid`;

即使您没有运行shell命令的权限,您也可以在/ proc(在Linux系统上)找到pid并使用POSIX扩展名终止....

<?php

$ps=glob('/proc/[0-9]*');
foreach ($ps as $p) {
    if (is_dir($p) && is_writeable($p)) {
        print "proc= " . basename($p);
        $cmd=file_get_contents($p . '/cmdline');
        print " / " . file_get_contents($p . '/cmdline');
        if (preg_match('/(php).*(myscript.php)/',$cmd)) {
            posix_kill(basename($p), SIGKILL);
            print " xxxxx....";
            break;
        }
        print "\n";
    }  
}

答案 1 :(得分:5)

昨天我来到了这个帖子!我错误地在页面中有一个无限循环,这个循环不应该被访问,而I/O to 100CPU usage to 100 I/O的增加是因为某些php errors而且它正在变得越来越多logged和日志文件大小的增长超出了任何人的想象。

以上所有技巧都不适用于我的shared hosting

我的解决方案

  1. 在cPanel中,转到PHP版本(当前版本除外)

  2. 暂时选择任何PHP版本。

  3. 然后Apply Changes

  4. 为什么工作

    有一些php错误的无限循环的脚本是一个过程,所以我只需要杀死它,更改php版本加强重启的服务,如php和Apache,并且因为重启涉及早期进程被杀,我很放松I/OCPU使用情况稳定。另外,我在更改php版本之前修复了这个bug :)

答案 2 :(得分:0)

你是如何部署脚本的?当然你可以删除它(如果这是一个可接受的选项)。否则修改它并插入一些逻辑,只允许它根据服务器时间每n分钟/小时/天发送一次邮件?

重。停止脚本执行(或者更确切地说系统试图执行它)你是如何安排执行的?是某种类型的gui到crontab或什么?你能不能撤消你在那里所做的事情(因为你无法访问命令行/终端)?

rob ganly

答案 3 :(得分:0)

简单。 致电支持部门,取消支持。 下次,不要执行你无法控制的事情。