Я думал, что это будет очень просто, но, видимо, нет.Как отправить сигнал SIGUSR1 демону из скрипта Apache PHP (Ubuntu 14.04)
У меня есть демон (в настоящее время тестируется как обычный исполняемый файл), и мне нужно контролировать, что он делает с веб-страницы. Сидящим в середине является база данных MySQL, содержащая все необходимые данные, переданные в обоих направлениях. Все на одной машине.
Когда команда выдается с веб-страницы, PHP помещает соответствующие данные в базу данных, демон читает ее и действует. Все идет нормально.
Однако база данных опросов демонов, поэтому есть временная задержка. То, что я хочу сделать, - отправить daemon сообщение, чтобы сказать «посмотреть сейчас». Поэтому я думал, что отправлю ему сигнал - SIGUSR1.
Это работает абсолютно нормально, когда сигнал отправляется из командной строки (kill -SIGUSR1 ....), но не из PHP-системы («kill -SIGUSR1 ....»).
Итак, я подумал - внутренняя команда оболочки, поэтому поместите команду kill в сценарий оболочки. Опять же, отлично работает при запуске из командной строки, но не из API-интерфейса Apache PHP().
Пробовал то же самое, используя PHP posix_kill(), это тоже не удалось.
Появляется вопрос с разрешениями. У пользователя скрипта Apache нет разрешения на выдачу команды kill. Поэтому я подумал, ОК - просто для тестирования в любом случае - SUID скрипт. Вы не можете использовать скрипты SUID, или так оно появляется.
Итак, sudo'd скрипт в вызове system(), добавив скрипт и пользователь (www-data) в /etc/sudoers.d, чтобы не было приглашения пароля sudo. Команда kill или pkill в скрипте по-прежнему возвращается с кодом 1 (разрешен отказ), но он работает от имени root.
Так что я застрял. Кажется, простая вещь - отправить демону сигнал сказать «проснуться». Но я не могу найти способ сделать это.