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

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

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

Есть ли более гибкий способ достичь этого?

  • Какие агенты передачи почты используют PHP?
  • Открывать порт 80, но оставаться в безопасности
  • установить php5 с поддержкой readline на debian wheezy
  • Как установить несколько экземпляров PHP и настроить для Apache
  • SSH-туннель для MySQL для PHP-скриптов
  • Высокий холостой ход CPU / Low CPU Load average
  • Компиляция PHP и установка его в одном каталоге
  • Поиск нескольких таблиц mysql для тех же 2 полей в каждой таблице
  • 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 - лучшая ОС в мире.