在linux上我有一个python脚本,它总是从预定义的用户开始。它可能需要一段时间才能完成,因此我希望允许其他用户将其从网站上停止。
使用kill失败,不允许操作。
我可以以某种方式修改我长时间运行的python脚本,以便它能够从另一个用户那里收到信号吗?显然,另一个用户是启动Web服务器的用户。
可能存在完全不同的方法来解决我现在想不到的问题。
答案 0 :(得分:1)
如果您不想使用正确的权限执行kill命令,则可以将任何其他信号发送到其他脚本。然后是其他脚本终止的责任。除非您具有此权限,否则您无法强制执行此操作。
这可能发生在网络连接或其他脚本检查其存在的“kill”文件或脚本能够侦听的任何其他内容中。
答案 1 :(得分:1)
在我的脑海中,一个解决方案是穿过脚本并等待某种形式的杀戮信号。或者不是线程,你可以有一个脚本通过循环每隔N次检查一次的文件 - 然后你只需要向该文件写一个kill信号(当然它有web用户的写权限)。
除了杀死我自己的脚本之外,我对杀戮并不十分熟悉,因此可能有更好的解决方案。
答案 2 :(得分: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>
<?
}
?>
关于这个的说明是“非常基本的未经测试的代码”:)
答案 3 :(得分:0)
您可以使用sudo
以root身份执行kill命令,但这是一种可怕的做法。
让长时间运行的脚本每x秒检查一些条件怎么样,例如是否存在像/tmp/stop-xyz.txt
这样的文件?如果找到该文件,脚本会立即终止。
(或任何其他进程间通信方式 - 无关紧要。)