Как правильно настроить php скрипт в сервисе systemd?

ТАК,
Я пытаюсь настроить службу с помощью systemd на камере Axis (я считаю, что это Arch Linux или очень урезанная версия Linux, которая сделана на заказ). У меня есть сервис, настроенный следующим образом:

myservice.service:

[Unit]
Description=Ping Monitoring Daemon
After=network.target
After=network-online.target

[Service]
Type=oneshot
ExecStart=/etc/init.d/listen-start.sh
ExecStop=/etc/init.d/listen-stop.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Вот listen-start.sh:

#!/bin/sh
echo $(curl http://website.com/logssomethingtoadatabase.php?action=start)

Мой скрипт php:

<?php
echo 'Service Started';

while (true) {
$foo = print_r($_SERVER, true);

$blnStop = false;

if ( $_GET['action'] === 'start') {
mail("[email protected]","Debug", "Camera service started with current values:\r\n\r\n" . $foo);
} else {
mail("[email protected]","Debug", "Camera service stopped with current values:\r\n\r\n" . $foo);

$blnStop = true;
}

if ( $blnStop ) {
break 2;
}

sleep(60);
}

echo 'Service Stopped';
die();
?>

Проблема, с которой я сталкиваюсь, — это когда я запускаю сервис, я не могу «остановить его», даже после того, как на нем запущены команды «systemctl stop» и «disable». Я должен выключить и снова включить камеру, чтобы она перестала писать мне по электронной почте. Я не могу заставить его «вырваться» из цикла while.

Цель здесь — вызывать этот сценарий каждые 60 секунд, что является попыткой мониторинга устройства. В этом случае я должен использовать systemd, поскольку это все, что поддерживает камера.

Дополнительная информация: Команды systemctl start и stop работают успешно, а сам скрипт работает нормально.

Может ли кто-нибудь увидеть что-то, чего мне не хватает?

1

Решение

Сценарий listen-stop.sh, вероятно, вызывает скрипт php с помощью action = stop, верно? вероятно, как:

#!/bin/sh
echo $(curl http://website.com/logssomethingtoadatabase.php?action=stop)

что вы пытаетесь достичь в этом while (true) цикл не будет работать, потому что PHP-скрипт, который был запущен start call, всегда будет иметь значение $ _GET [‘action’] = ‘start’. ваше последующее исполнение systemctl stop не повлияет на уже запущенный скрипт php, поэтому его выполнение никогда не заканчивается.

ВОПРОС: этот сценарий php должен делать что-то в отношении камеры? или просто отправить почтовое уведомление о том, что служба запущена / остановлена?

если это только почтовое уведомление, то все, что вам нужно иметь в этом php-скрипте:

<?php

if ( $_GET['action'] === 'start') {
mail("[email protected]","Debug", "Camera service started with current values:\r\n\r\n" . $foo);
echo 'Service Started';
} else {
mail("[email protected]","Debug", "Camera service stopped with current values:\r\n\r\n" . $foo);
echo 'Service Stopped';
}

?>

TL; DRВы написали сценарий в похожем режиме, как сценарий bash daemon, но это не так. при каждом выполнении сценария php создается новый экземпляр, поэтому вы не можете «общаться» с экземпляром, который вы создали при выполнении systemctl start,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]