8

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

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

4

4 回答 4

9

有没有办法停止脚本?我在共享主机中,因此无法访问命令提示符,也不知道 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";
    }  
}
于 2011-09-05T08:54:47.323 回答
7

我昨天来到这个线程!我错误地在一个不应该访问的页面中有一个无限循环,这增加了我的I/O to 100,并且CPU usage to 100 I/O是因为一些php errors,它正在获取logged并且日志文件的大小正在增加超出任何人的想象。

上述技巧都不适用于我的shared hosting.

我的解决方案

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

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

  3. 然后Apply Changes

起作用的原因

带有一些 php 错误的无限循环的脚本是一个进程,所以我只需要杀死它,更改 php 版本会加强重新启动 php 和 Apache 等服务,并且由于涉及重新启动,早期的进程被杀死,我很放松I/OCPU使用稳定下来。此外,我在手动更改 php 版本之前修复了该错误:)

于 2015-04-05T07:54:45.473 回答
0

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

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

抢劫甘利

于 2011-09-05T07:54:09.830 回答
0

简单地 。打电话给支持,取消它。下一次,不要执行你无法控制的事情。

于 2011-09-22T10:03:08.000 回答