【问题标题】:terminate script of another user终止另一个用户的脚本
【发布时间】:2010-07-19 12:46:03
【问题描述】:

在一个 linux 机器上,我有一个总是从预定义用户启动的 python 脚本。它可能需要一段时间才能完成,所以我想允许其他用户从网络上阻止它。

使用 kill 失败,不允许操作。

我能否以某种方式修改我长时间运行的 python 脚本,使其接收来自其他用户的信号?显然,另一个用户是启动 Web 服务器的用户。

可能有完全不同的方法来解决这个我现在想不出的问题。

【问题讨论】:

  • 您是否以启动进程的用户身份运行 kill?
  • 没有。它以 web 服务器用户身份从 php 脚本启动。

标签: python linux signals kill


【解决方案1】:

如果您将 python 脚本设置为在您的服务器上以deamon(Unix 守护程序下的页面底部)运行(这听起来很合适),并且您授予 apache 用户执行 init.d 脚本的权限服务,那么你可以用类似这样的php代码来控制服务(来自here - 在这种情况下服务脚本名称是'otto2'):

<? 
$otto = "/usr/etc/init.d/otto2 "; 

if( $_GET["action"] ) { 
    $ret = shell_exec( $otto.$_GET["action"] ); 
    //Check your ret value  
} 
else { 
    ?> 
    <a href="<?=$PHP_SELF?>?action=start">Start  </a> 
    <a href="<?=$PHP_SELF?>?action=stop">Stop  </a> 
    <? 
} 

?>

关于那是'真正基本的未经测试的代码':)

【讨论】:

    【解决方案2】:

    在我的脑海中,一种解决方案是线程化脚本并通过某种形式等待终止信号。或者不是线程,您可以拥有一个脚本通过循环每 N 次检查一次的文件 - 然后您只需向该文件写入一个终止信号(当然,该文件具有网络用户的写入权限)。

    我对kill不是很熟悉,除了杀死我自己的脚本,所以可能有更好的解决方案。

    【讨论】:

      【解决方案3】:

      如果您不想以正确的权限执行 kill 命令,您可以向其他脚本发送任何其他信号。然后其他脚本有责任终止。你不能强迫它,除非你有这样做的权限。

      这可能发生在网络连接、其他脚本检查其存在的“kill”文件或脚本能够侦听的任何其他情况下。

      【讨论】:

        【解决方案4】:

        您可以使用 sudo 以 root 身份执行 kill 命令,但这是一种可怕的做法。

        让长时间运行的脚本每隔 x 秒检查一次条件如何,例如是否存在像 /tmp/stop-xyz.txt 这样的文件?如果找到该文件,脚本会立即自行终止。

        (或任何其他进程间通信方式 - 没关系。)

        【讨论】:

          猜你喜欢
          • 2011-03-04
          • 1970-01-01
          • 2014-09-26
          • 2020-08-28
          • 2011-11-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多