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