У меня проблемы с tmux / screen в php.
Когда я пытаюсь запустить сеанс экрана ничего не происходит.
Когда я пытаюсь запустить сеанс tmux, он работает, только если я предоставляю доступ к оболочке www-data, и даже тогда окна не добавляются 🙁
Чего я пытаюсь достичь:
Я хочу написать веб-интерфейс для некоторых процессов, которые я запускаю на виртуальной машине.
Для этого я написал несколько скриптов (на bash, так как я нахожусь на Linux-машине Debian).
Эти сценарии должны сделать некоторые вещи:
— начать новое окно tmux (и сеанс, если он еще не существует)
— посмотрите, работает ли окно tmux / активно
— остановить процесс (который автоматически закрывает окно)
И выполнено вручную (в терминале) эти скрипты ведут себя как хотели.
Теперь веб-интерфейс должен запустить эти скрипты (чтобы они выполнялись через функцию exec в php).
Поскольку они запускаются через php, они запускаются как пользовательские www-данные, поэтому я не могу получить доступ к сеансам tmux, созданным www-данными.
Итак, у меня есть несколько рекомендаций при запуске окна / сессии:
У меня есть названная сессия
tmux new-session -s $ SessionName
Его нужно запускать отдельно, так как он запускается с php
tmux new-session -d -s $ SessionName
Я хочу иметь доступ к сеансу как суперпользователь -> я должен определить расположение сокетов
tmux -S $ SocketLocationPath new-session -d -s $ SessionName
В итоге моя команда выглядит так:
tmux -S /tmp/pairedsession.socket new-session -d -s "ProcessGroup1"
Проблемы с этой командой:
без доступа к оболочке эта команда возвращает не удалось подключиться к серверу (что странно, поскольку new-session обычно должен запускать сервер)
с доступом к оболочке (что мне не нравится по соображениям безопасности), однако сеанс создан именно так, как я хотел
Но есть еще некоторые проблемы:
Как я уже говорил, я хочу создать несколько окон для обработки процессов.
Команда выглядит так:
tmux -S $SocketLocationPath new-window -t "$SessionName" -n "$WindowName" "$cmd"
Это работает, но только для глобальных процессов (например, htop) или процессов в каталоге php (как и другие скрипты)
Что я хочу сделать, так это выполнить процесс в своем собственном рабочем каталоге, который не обязательно находится в каталоге php -> Как я могу изменить это
Что я пробовал
дал www-data доступ к оболочке
sudo chsh -s / bin / sh www-data
использование функций shell_exec, passthrough и exec в php
Возможные решения
изменить некоторые настройки PHP, чтобы разрешить только определенные каталоги или это даже стоит?
сделать что-то совершенно другое ???
Еще одна странная вещь: при запуске сеансов tmux через php терминал не имеет ни пользователя, ни местоположения
Обычно это выглядит как user @ machinename $ …
С php это выглядит как $ … больше ничего
Я надеюсь, что кто-то может мне помочь, потому что мне просто не нравятся эти грязные обходные пути: /
заранее спасибо
— супер пушистый
После некоторой борьбы, с помощью googleguy @ freenode # php, я наконец побежден.
Оказывается, в PHP 7.1 (в моем случае) такой проблемы нет вообще.
Мне удалось выполнить эту последовательность:
shell_exec("tmux new-session -s session_name -d");
shell_exec("tmux send -t session_name gedit ENTER");
Ткни мне это не работает с тобой
Других решений пока нет …