我有一项服务,我列出了Twitter帐户,并为他们启用/禁用 Streaming API 连接。
目前我正计划有这样的流程:
当用户希望为Streaming启用Twitter帐户时,我想直接启动Phirehose进程以在后台运行。如果用户想要停止该帐户的流式传输,我也想直接终止该过程。
执行Phirehose流程存在一些风险和担忧,特别是以自动方式杀死它。
有关以最佳自动化和最小管理干扰实现此目标的最佳方法的任何提示吗?
答案 0 :(得分:1)
我通过两个步骤完成了类似的事情: 第一部分是创建一个提供启动/停止命令的Web界面。 Web界面将文件写入服务器。一个开始,一个停止。 start.lock,stop.lock。
第二部分是一个bash脚本,用于查找这些文件的存在。下面是检查启动服务的start.sh脚本的示例。它创建一个“running.lock”文件,知道不要尝试启动正在运行的服务。您也会将这些文件用于报告目的。
stop.sh和start.sh是cron计划经常运行的。出于我的目的,它们每分钟运行一次,脚本中的循环用于更频繁地检查。即每分钟运行并每10秒检查一次。
我认为您可以根据自己的具体需求进行修改。希望它有所帮助。
#!/bin/bash
for ((c=1; c<=5; c++))
do
file="start.lock"
if [ -f "$file" ]
then
sfile="running.lock"
if [ ! -f "$sfile" ]
then
<command goes here>
touch running.lock
rm start.lock
fi
fi
sleep 10
done
并阻止它:
#!/bin/bash
for (( c=1; c<=11; c++ ))
do
file="stop.lock"
if [ -f "$file" ]
then
killall -9 <your service>
rm running.lock
rm start.lock
rm stop.lock
fi
sleep 5
done
答案 1 :(得分:0)
我目前正在使用以下脚本来保持phirehose进程始终运行。我希望能够从php控制它,所以我也用php而不是bash编写了启动脚本。
我添加了一些代码,让我知道发生了什么类型的错误或非错误,但总是尝试重新连接。
phirehose-launcher.php:
<?php
while(1) {
passthru('/usr/bin/php my-phirehose-script.php', $code);
// if exits with error, show error but try to reconnect
if ($code) {
print "Encountered an error.\n";
print "Return code: $code.\n";
print "Waiting 5 seconds and will retry connection.\n";
sleep(5);
} else {
// if Phirehose exits gracefully, restart it
print "Script exited. Restarting.\n";
}
// Try again in 5 secs
sleep(5);
}
如果你想让它在后台运行,我还没有尝试过,但它应该可以添加一个&amp;在启动程序中的脚本名称之后(如下面的代码中所示)或启动程序脚本本身。
passthru('/usr/bin/php my-phirehose-script.php &', $code);
在我的PhirehoseConsumer课程中,我覆盖了日志方法来修改输出以进行记录。
protected function log($message,$level='notice')
{
switch($level) {
case 'error':
print "Phirehose [ERROR]: $message\n";
break;
// should email these or text
case 'info':
print "Phirehose [INFO]: $message\n";
break;
case 'notice':
default:
// meh
break;
}
}
我没有退出脚本,而是看到了这样的记录输出:
Phirehose [INFO]: Idle timeout: No stream activity for > 90 seconds. Reconnecting.
你可以杀死启动器php脚本并杀死子进程。这是一种控制流程的简便方法。并且它可以捕获空闲超时并从phirehose退出,这样即使流中断或互联网连接,该过程也会继续运行。