2017-01-28 12 views
0

Я думал, что это будет очень просто, но, видимо, нет.Как отправить сигнал 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.

Так что я застрял. Кажется, простая вещь - отправить демону сигнал сказать «проснуться». Но я не могу найти способ сделать это.

ответ

0

Ну, очень странно, после перезагрузки и без каких-либо других изменений сумо-подход внезапно сработал. Резюме:

  1. Создать скрипт, содержащий (pkill) команда
  2. Место в/USR/местные/бен и сделать исполняемым
  3. Добавить WWW-данные в sudoers для этой команды (новый файл в/и т.д./sudoers .d)
  4. Звонок с PHP скрипт Apache как система («sudo/usr/local/bin/script_ name»)