Запуск / остановка программы с веб-сайта

У меня есть некоторые пользователи на моей машине, которые позволяют запускать небольшие голосовые серверы Mumble. Я хотел бы, чтобы они могли запускать / останавливать свой голосовой сервер с веб-сайта (будучи запущенным Apache). При текущей настройке каждый сервер запускается как другой пользователь (специальная учетная запись пользователя).

То, что я не могу понять, это лучший способ запустить / остановить сервер без задержек. В настоящее время у меня есть сайт, который делает запись в базу данных всякий раз, когда они хотят начать / остановить свое обслуживание. Затем у меня есть скрипт cron, который запускается каждую минуту в базе данных для этих запусков / остановок. Этот cron-скрипт переключится на учетную запись пользователя и запустит сервер в качестве этого пользователя. Моя проблема заключается в том, что для выполнения этой операции может потребоваться около 1 минуты.

  • Интерфейс PHP для управления учетными записями пользователей Linux
  • Почему я получаю ошибку несуществующего класса в PHP на Fedora?
  • влияние разрешения Apache на выполнение некоторых команд на сервере
  • Не удается перезапустить httpd.service
  • 500: Внутренняя ошибка сервера из программы CGI
  • Перенаправление портов IPTables должно быть сломанным Apache, но не было
  • Есть ли более гибкий способ достичь этого?

  • Как я могу отлаживать Apache, не начиная с загрузки
  • Запретить некоторые IP-адреса из определенной сети на Apache?
  • Сертификат SSL подстановки не работает с открытым доменом
  • Как настроить Apache для использования портов 1 и других портов ниже 80?
  • Certbot добавляет домен www к существующему сертификату домена
  • Обновление PHP для Gaurd против вредоносных программ Mayhem
  • 5 Solutions collect form web for “Запуск / остановка программы с веб-сайта”

    Вместо того, или в дополнение к записи в базу данных, рассмотрели ли вы письмо с именованным каналом? Вы можете создать один и тот же канал для каждого пользователя, а затем создать процесс для просмотра каждого именованного канала. Когда приходит команда «restart», немедленно перезапустите процесс.

    Это не полное решение и может быть улучшено, но оно должно дать вам представление о том, как вы могли контролировать именованный канал и перезапустить процесс.

    while read line <$pipe do if [[ "$line" == 'restart' ]]; then restart_some_service fi done 

    Это может быть излишним, но вы считали, что у вас есть? Они перечисляют плагин процесса в стандартных плагинах , который позволяет вашим пользователям

    Просмотрите все процессы, запущенные в системе, убейте тех, которые принадлежат [их], и запустите новые.

    ( Никогда не пробовал это , просто подумал, что это может быть довольно, э-э, «профессионально»).

    ( Редактирование «Mumble», похоже, некоторые веб-интерфейсы уже есть , но я не знаю, помогут ли они в вашей ситуации.)

    Если эти люди, на которых вы размещаете серверы, заслуживают доверия и не будут спама / взлома сервера, почему бы просто не запрограммировать веб-интерфейс, чтобы напрямую передавать старт / стоп в оболочку

    Например, в PHP вы можете запрограммировать это на странице:

     <?php // checks, templating, blah, blah, blah $status = exec('/path/to/service/mumbled status') if ($status == "stopped") // display start button, hook exec('mumbled stop') command to it if ($status == "running") // display stop button, hook exec('mumbled start') command to it ?> 

    Если бы это был я, я бы пошел по этому маршруту, но это только я.

    Я создал что-то вроде этого на одном из моих веб-серверов, у которого была проблема с sshd, иногда умирающим – я хотел вручную перезапустить sshd из аутентифицированного веб-интерфейса. Это было предназначено (в моем случае) для краткосрочного решения, так как полное обновление ОС не было слишком далеко.

    Я установил php-страницу, похожую на ту, что предложил nonplus, используя shell_exec для выполнения определенной команды через sudo:

      $output = shell_exec("/usr/local/bin/sudo /usr/local/etc/rc.d/sshd.sh restart"); echo "<pre>$output</pre>"; 

    Таким образом, я мог бы редактировать локальный файл sudoers чтобы дать моему пользователю apache соответствующий доступ к определенным командам. Мне нужно было предоставить ему привилегию на начальном уровне для запуска sshd; вы можете ограничить его запуском / остановкой соответствующих служб в качестве соответствующих пользователей.

    Ваш метод cron находится на правильном пути. Большинство других методов имеют различные проблемы безопасности. Чтобы ускорить эту идею, вы можете коснуться файла и использовать inotify, чтобы обнаружить, что он был изменен. inotify необычайно быстро. «inotify-tools» – это легкодоступный набор инструментов командной строки, которые используют inotify. На сайте github есть несколько хороших примеров для inotify-tools.

    От: https://github.com/rvoicilas/inotify-tools/wiki/#wiki-info

     #!/bin/sh EVENT=$(inotifywait --format '%e' ~/file1) [ $? != 0 ] && exit [ "$EVENT" = "MODIFY" ] && echo 'file modified!' [ "$EVENT" = "DELETE_SELF" ] && echo 'file deleted!' 

    Это в основном мгновенное – inotify – это функция ядра, которая использует эти инструменты для получения запросов уведомления ядра о очень специфических событиях файловой системы.

    Linux и Unix - лучшая ОС в мире.