linux — Как отправить сигнал SIGUSR1 демону из PHP-скрипта Apache (Ubuntu 14.04)

Я думал, что это будет действительно просто, но, видимо, нет.

У меня есть демон (в настоящее время тестируется как обычный исполняемый файл на самом деле), и мне нужно контролировать, что он делает с веб-страницы. Посередине находится база данных MySQL, содержащая все необходимые данные, передаваемые в обоих направлениях. Все на одной машине.

Когда команда запускается с веб-страницы, PHP помещает соответствующие данные в базу данных, демон читает их и действует. Все идет нормально.

Однако, база данных опрашивает демон, поэтому существует временная задержка. Я хочу послать демону сообщение «посмотри сейчас». Поэтому я решил послать ему сигнал — SIGUSR1.

Это прекрасно работает, когда сигнал отправляется из командной строки (kill -SIGUSR1 ….), но не из системы PHP («kill -SIGUSR1 ….»).

Поэтому я подумал — команда внутренней оболочки, поэтому поместите команду kill в скрипт оболочки. Опять же, отлично работает при запуске из командной строки, но не из API системы Apache PHP.

Попробовал то же самое с помощью PHP posix_kill (), что также не удалось.

Похоже, проблема с разрешениями. У пользователя скрипта Apache нет прав на команду kill. Так что я подумал, хорошо — просто для тестирования в любом случае — SUID сценария. Вы не можете SUID скрипты, или так кажется.

Итак, sudo сделал скрипт в вызове system (), добавив скрипт и пользователя (www-data) в /etc/sudoers.d, чтобы не было запроса sudo password. Команда kill или pkill в сценарии по-прежнему возвращается с кодом 1 (разрешение запрещено), но выполняется от имени пользователя root.

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

0

Решение

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

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

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

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

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