使用PHP和计时器启动和终止后台python脚本
我要做的事情有点复杂 我有一个python脚本,我想从PHP运行它,但在后台运行。我在某个地方看到,要在后台运行python脚本,我必须使用PHP命令使用PHP和计时器启动和终止后台python脚本,php,python,mysql,timer,Php,Python,Mysql,Timer,我要做的事情有点复杂 我有一个python脚本,我想从PHP运行它,但在后台运行。我在某个地方看到,要在后台运行python脚本,我必须使用PHP命令exec(script.py)来运行,而不必等待返回:到目前为止,没有问题 第一个问题: 我必须用另一个PHP命令停止这个循环脚本,如何做到这一点 第二个问题: 我必须实现一个服务器端计时器,它在时间结束时停止脚本 我发现这个代码: <?php $timer = 60*5; // seconds $timestamp_file = 'end_
exec(script.py)
来运行,而不必等待返回:到目前为止,没有问题
第一个问题:
我必须用另一个PHP命令停止这个循环脚本,如何做到这一点
第二个问题:
我必须实现一个服务器端计时器,它在时间结束时停止脚本
我发现这个代码:
<?php
$timer = 60*5; // seconds
$timestamp_file = 'end_timestamp.txt';
if(!file_exists($timestamp_file))
{
file_put_contents($timestamp_file, time()+$timer);
}
$end_timestamp = file_get_contents($timestamp_file);
$current_timestamp = time();
$difference = $end_timestamp - $current_timestamp;
if($difference <= 0)
{
echo 'time is up, BOOOOOOM';
// execute your function here
// reset timer by writing new timestamp into file
file_put_contents($timestamp_file, time()+$timer);
}
else
{
echo $difference.'s left...';
}
?>
从答案来看
那么,有没有一种方法可以在MySQL数据库中实现它?(与脚本停止的集成不是问题)这实际上相当简单。您可以使用内存对象缓存系统。我建议
memcached
。memcached
中的内存对象可以从系统中的任何位置进行访问。唯一的要求是支持到memcached后端服务器的连接。(PHP有,Python有,等等)
回答第一个问题:
在memcached
数据库中创建一个名为stopme
的变量,其值为0
从python脚本连接到memcached数据库,并永久读取变量stopme
。假设python脚本在变量stopme
具有值0
时运行
要从PHP停止脚本,请将PHP脚本连接到memcached服务器,并将stopme
设置为1
python脚本立即接收更新的值并退出
回答第二个问题:
通过读取共享变量,可以像我之前的回答中所解释的那样完成,但另外我想提到的是,您也可以使用cronjob来终止正在运行的脚本。使用它来获取进程ID,将其存储在文件或数据库中,然后稍后只终止具有该ID的进程。请记住,无论进程多么小,它都可能已经停止,而另一个进程最终使用了该ID(这意味着您正在终止另一个进程)