Je pense que les deux -cparamètres ( suet bash) devront être cités au minimum.
su - username -c "/usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'"
On -s'attend également à ce qu'il soit le dernier et peut ne pas être souhaitable ici (voir man su).
Encore quelques remarques. sudo pourrait être un meilleur choix pour une commande à un coup comme la vôtre, mais pas nécessairement:
sudo -iu username /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'
En particulier, vous pouvez utiliser un niveau de cotation en moins avec sudo.
Vous devez également faire attention à exécuter des commandes sans chemin absolu dans un contexte privilégié. Cela vaut pour su(ou sudo) mais aussi pour le chemin d'accès à bashdans votre commande. Vous le faites bien avec screen.
Je viens de tester ce qui suit et cela fonctionne bien. Je pense que -c'est le principal problème dans votre ligne d'origine:
/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"
Remarque maléfique: pourquoi ne pas tmuxessayer? J'ai récemment changé et je n'ai jamais regardé en arrière. La seule chose que je devais changer immédiatement était la combinaison de touches préfixe qui tmuxpar défaut Ctrl+ B- Retour à la GNU screende Ctrl+ A.
Il permet de diviser votre fenêtre en un nombre presque arbitraire de volets (verticalement et horizontalement) et son format de fichier de configuration (y compris celui pour le statut par) est en fait intelligible pour les humains. Bien sûr, tmuxc'est aussi bien que screenlorsque vous voulez simplement exécuter un programme / script non écrit à l'origine en tant que démon en arrière-plan. Cependant, si vous avez l'intention d'interagir avec le multiplexeur de terminaux, je le recommande vivement tmux.
suousudo?