J’ai des problèmes avec tmux / screen en php.
Lorsque je tente de lancer une session écran, rien ne se passe.
Lorsque j’essaie de lancer une session tmux, cela ne fonctionne que si je donne l’access à www-data shell et même si aucune fenêtre n’est ajoutée 🙁
Ce que j’essaie de réaliser:
Je veux coder une interface Web pour certains processus que je lance sur une machine virtuelle.
Pour cela j’ai écrit des scripts (en bash depuis que je suis sur une machine Linux debian).
Ces scripts doivent faire certaines choses:
– lancer une nouvelle fenêtre tmux (et la session si elle n’existe pas encore)
– voir si une fenêtre tmux est active / active
– stop processus (qui ferme automatiquement la fenêtre)
Et exécutés manuellement (dans un terminal), ces scripts se comportent comme souhaité.
Maintenant, l’interface Web lancera ces scripts (ils seront donc exécutés sur la fonction exec en php).
Comme ils sont exécutés sur PHP, ils sont exécutés en tant qu’utilisateur www-data, donc je ne peux pas accéder aux sessions tmux créées par www-data.
Donc, j’ai quelques recommandations lors du démarrage de la fenêtre / session:
J’ai une session nommée
tmux new-session -s $ SessionName
Il doit être démarré depuis son lancement depuis php
tmux new-session -d -s $ SessionName
Je veux pouvoir accéder à la session en tant que superutilisateur -> je dois définir un emplacement de socket
tmux -S $ SocketLocationPath new-session -d -s $ SessionName
Donc, ma commande ressemble à ceci à la fin:
tmux -S /tmp/pairedsession.socket new-session -d -s "ProcessGroup1"
Problèmes avec cette commande:
sans access au shell, cette commande ne parvient pas à se connecter au serveur (ce qui est bizarre puisque la nouvelle session devrait normalement démarrer le serveur)
avec access shell (ce que je n’aime pas pour des raisons de sécurité) mais la session est créée exactement comme je le voulais
Mais il y a encore quelques problèmes:
Comme je l’ai indiqué avant que je veuille créer des fenêtres pour gérer les processus
La commande ressemble à ceci:
tmux -S $SocketLocationPath new-window -t "$SessionName" -n "$WindowName" "$cmd"
Cela fonctionne mais uniquement pour les processus globaux (comme htop) ou les processus du répertoire php (comme les autres scripts)
Ce que je veux faire cependant, c’est d’exécuter un processus dans son propre répertoire de travail, qui n’est pas nécessairement dans un répertoire php ->
Ce que j’ai essayé
a donné access à www-data au shell
sudo chsh -s / bin / sh www-data
utiliser les fonctions shell_exec, passthrough et exec dans php
Solutions possibles
changer un paramètre php pour n’autoriser que certains répertoires ou est-ce que cela en vaut la peine?
faire quelque chose de complètement différent ???
Une autre chose étrange: lors du lancement des sessions tmux sur php, le terminal n’a aucun utilisateur et aucun emplacement
Normalement, il ressemble à user @ machinename $ …
Avec php, ça ressemble à $ … rien de plus
J’espère que quelqu’un peut m’aider, parce que je n’aime pas ces solutions de rechange désordonnées: /
Merci d’avance – superfuzzy
Après quelques difficultés, avec l’aide de googleguy @ freenode # php, je suis finalement parvenu à le réduire.
Il s’avère que PHP 7.1 (dans mon cas) n’a aucun problème de ce type.
Je réussis à exécuter cette séquence:
shell_exec("tmux new-session -s session_name -d"); shell_exec("tmux send -t session_name gedit ENTER");
Poke moi ça ne marche pas avec toi