У меня возникают проблемы с tmux/screen в php.
Когда я пытаюсь запустить сеанс экрана, ничего не происходит.
Когда я пытаюсь запустить сеанс tmux, он работает только в том случае, если я предоставляю доступ к оболочке www-data, и даже тогда никаких окон не добавляется:(
То, что я пытаюсь достичь:
Я хочу закодировать webinterface для некоторых процессов, которые я запускаю на виртуальной машине.
Для этого я написал несколько сценариев (в bash, так как я на Linux-машине debian).
Эти скрипты должны делать некоторые вещи:
- запустите новое окно tmux (и сеанс, если он еще не существует)
- посмотреть, работает ли окно tmux/активно
- остановить процесс (который автоматически закрывает окно)
И выполнив вручную (в терминале), эти скрипты ведут себя как нужно.
Теперь веб-интерфейс должен запустить эти скрипты (чтобы они выполнялись над функцией exec в php).
Поскольку они запускаются через php, они запускаются как пользовательские www-данные, поэтому я не могу получить доступ к сеансам tmux, созданным www-data.
Итак, у меня есть несколько рекомендаций при запуске Window/session:
-
У меня есть именованный сеанс
tmux new-session -s $SessionName
-
Его нужно запустить отдельно от его начала с php
tmux new-session -d -s $SessionName
-
Я хочу иметь доступ к сеансу как суперпользователю → Мне нужно определить socketlocation
tmux -S $SocketLocationPath new-session -d -s $SessionName
Итак, моя команда выглядит так:
tmux -S /tmp/pairedsession.socket new-session -d -s "ProcessGroup1"
Проблемы с этой командой:
-
без доступа к оболочке эта команда возвращает не подключиться к серверу (что странно, поскольку новый сеанс обычно должен запускаться на сервере)
-
с доступом к оболочке (что мне не нравится по соображениям безопасности), однако сеанс создается точно так, как я хотел
Но есть еще некоторые проблемы:
Как я уже говорил, я хочу создать несколько окон для обработки процессов
Команда выглядит следующим образом:
tmux -S $SocketLocationPath new-window -t "$SessionName" -n "$WindowName" "$cmd"
Это работает, но только для глобальных процессов (например, htop) или процессов в каталоге php (например, других скриптов)
Что я хочу сделать, это выполнить процесс в своем рабочем каталоге, который не обязательно находится в каталоге php → КАК МОЖНО ИЗМЕНИТЬ, ЧТО
Что я пробовал
- добавление 2 > & 1 к каждой команде для отладки → без помощи
- создание сеансов без SocketLocation
- переключается с экрана на tmux, поскольку имеет упрощенный синтаксис
-
предоставил доступ к оболочке www-datap >
sudo chsh -s/bin/sh www-datap >
-
с использованием функций shell_exec, passthrough и exec в php
- используя экран с опцией -dmS
Возможные решения
- предоставить доступ к оболочке www-data (Риск безопасности?) или, возможно, ограничить доступ к tmux, но как?
- отключить настройку php только для запуска файлов в каталогах php (Риск безопасности?)
- добавить к мне неизвестный параметр tmux, который работает без оболочки: D
-
измените некоторые настройки php, чтобы разрешить только определенные каталоги или это даже стоит того?
-
сделать что-то совершенно другое.
Еще одна странная вещь: при запуске сеансов tmux поверх php у терминала нет пользователя и нет места
Обычно это выглядит как user @machinename $...
С php это просто выглядит как $... ничего более
Я надеюсь, что кто-то может мне помочь, потому что мне просто не нравятся эти грязные обходные пути:/
Спасибо заранее - суперфузия