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

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

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

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

  • Как можно отключить DYLD_LIBRARY_PATH для запуска процессов?
  • создание php-5.3 на арки linux
  • Unix system ("unzip archive.zip") Извлечение ZIP-файлов
  • компиляция PHP не приводит к ошибке libpcre
  • CURL не будет подключаться к себе
  • Невозможно вставить записи в sqlite в среде Linux
  • Превышение объема памяти на сервере с помощью PHP
  • Apache и php не работают. Сигнал выхода дочернего pid xxx. Ошибка сегментации (11)
  • 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 – это функция ядра, которая использует эти инструменты для получения запросов уведомления ядра о очень специфических событиях файловой системы.

    Interesting Posts

    Является ли `chmod -R ugo + rwx /` безопаснее, чем `chmod -R 777 /`?

    Получить имена SAN Lun

    Как вычислить шестнадцатеричный xor (^) из оболочки?

    Как остановить Vim от изменения моего каталога при выполнении make-файла?

    Как заставить процесс работать?

    Командная строка для отправки электронной почты, если загрузка процессора высока

    mkfs.xfs / dev / custom_dev

    Дата эпохи GNU +% s по сравнению с фразами времени с расчетами, включая месяцы?

    sudo tar изменяет права собственности на файлы неизвестного пользователя

    .htaccess для перенаправления URL-адреса с hashtag

    Как загрузить много документов на терминал с сервера?

    Я хочу изменить разрешения для всех папок / файлов, исключая некоторые из них

    BeagleBone Black не подключается через Ethernet на ноутбуке

    Как проверить, открыт ли конкретный порт на машине из сценария оболочки и выполнить действие на основе этого?

    Как расширить рабочий стол на мой второй монитор, а не просто клонировать его?

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