Python 终止另一个用户的脚本

Python 终止另一个用户的脚本,python,linux,signals,kill,Python,Linux,Signals,Kill,在linux机器上,我有一个python脚本,它总是从预定义的用户开始。它可能需要一段时间才能完成,所以我想允许其他用户从web上阻止它 使用kill失败,不允许操作 我是否可以修改我的长期运行的python脚本,以便它接收来自另一个用户的信号?显然,另一个用户是启动web服务器的用户 可能有完全不同的方法来解决这个问题,我现在想不出来。您可以使用sudo作为root用户执行kill命令,但这是一种可怕的做法 让长时间运行的脚本每x秒检查一次某些条件,例如是否存在类似/tmp/stop xyz.

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

使用kill失败,不允许操作

我是否可以修改我的长期运行的python脚本,以便它接收来自另一个用户的信号?显然,另一个用户是启动web服务器的用户


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

您可以使用
sudo
作为root用户执行kill命令,但这是一种可怕的做法

让长时间运行的脚本每x秒检查一次某些条件,例如是否存在类似
/tmp/stop xyz.txt的文件?如果找到该文件,脚本将立即终止


(或进程间通信的任何其他方式-无所谓。)

如果您不想以正确的权限执行kill命令,可以向其他脚本发送任何其他信号。然后,其他脚本负责终止。除非您具有强制执行的权限,否则无法强制执行


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

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


除了杀死我自己的脚本之外,我对kill不太熟悉,因此可能有更好的解决方案。

如果您将python脚本设置为在服务器上作为(Unix守护进程下的页面底部)运行(这听起来很合适),并授予apache用户执行服务的init.d脚本的权限,然后,您可以使用与此类似的php代码控制服务(从-本例中的服务脚本名称为“otto2”):



关于这一点的说明是“真正基本的未测试代码”:)

您是否以启动流程的用户身份运行kill?否。它是以web服务器用户的身份从php脚本开始的。
<? 
$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> 
    <? 
} 

?>