У меня есть служба, в которой я перечисляю учетные записи Twitter и у меня есть переключатель, чтобы включить / отключить Потоковый API связь для них.
В настоящее время я планирую иметь этот поток:
Я хотел бы запустить процесс Phirehose непосредственно для запуска в фоновом режиме, когда пользователь хочет, чтобы учетная запись Twitter была включена для потоковой передачи. Также я хотел бы убить процесс напрямую, если пользователь хочет остановить потоковую передачу для этой учетной записи.
Есть несколько рисков и проблем с выполнением процесса Phirehose и особенно с его автоматическим уничтожением.
Какие-нибудь советы о том, как реализовать это с максимальной автоматизацией и минимальным вмешательством администратора?
Я сделал аналогичные вещи в два этапа:
Первая часть заключается в создании веб-интерфейса, который предоставляет команды запуска / остановки. Веб-интерфейс записывает файл на сервер. один для начала, один для остановки. start.lock, stop.lock.
вторая часть представляет собой bash-скрипт, который ищет наличие этих файлов. Ниже приведен пример сценария start.sh, который проверяет запуск службы. Он создает файл «running.lock», чтобы не пытаться запустить работающий сервис. Вы также можете использовать файлы для отчетности.
stop.sh и start.sh предназначены для частого запуска cron. Для моей цели они запускаются каждую минуту, и цикл в скрипте используется для более частой проверки. т.е. каждую минуту бегать и проверять 5 раз каждые десять секунд.
Я думаю, что с этим вы можете изменить ваши конкретные потребности. Надеюсь, поможет.
#!/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
В настоящее время я использую следующий скрипт, чтобы процесс 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);
}
Если вы хотите, чтобы он работал в фоновом режиме, я не пробовал это, но он должен работать, чтобы добавить & после имени скрипта либо в программе запуска (как в коде ниже), либо в самом скрипте программы запуска.
passthru('/usr/bin/php my-phirehose-script.php &', $code);
В моем классе PhirehoseConsumer я переписал метод log, чтобы сделать вывод для регистрации.
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, так что процесс продолжает работать, даже если потоковая передача прерывается или подключение к Интернету.