Ich denke, beide -cParameter ( suund bash) müssen mindestens angegeben werden.
su - username -c "/usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'"
Es -wird auch erwartet, dass es das letzte ist und hier möglicherweise nicht wünschenswert ist (siehe man su).
Noch ein paar Bemerkungen. sudo könnte eine bessere Wahl für einen One-Shot-Befehl wie Ihren sein, aber nicht unbedingt:
sudo -iu username /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'
Insbesondere können Sie eine Zitierstufe weniger mit verwenden sudo.
Eine andere Sache, mit der Sie vorsichtig sein möchten, ist das Ausführen von Befehlen ohne absoluten Pfad in einem privilegierten Kontext. Dies gilt für su(oder sudo) aber auch für den Pfad zu bashin Ihrem Befehl. Du machst es richtig mit screen.
Habe gerade folgendes getestet und es funktioniert gut. Ich denke, das -ist das Hauptproblem in Ihrer ursprünglichen Zeile:
/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"
Böse Bemerkung: Warum tmuxversuchst du es nicht ? Ich habe kürzlich gewechselt und nie zurückgeschaut. Das einzige , was ich sofort war der Präfix Schlüssel ändern musste Kombination , die in tmuxStandardwerten Ctrl+ B- zurück zur GNU screen‚s Ctrl+ A.
Es ermöglicht die Aufteilung Ihres Fensters in eine nahezu beliebige Anzahl von Fenstern (vertikal und horizontal), und das Konfigurationsdateiformat (einschließlich des Formats für den Status par) ist für Menschen tatsächlich verständlich. Natürlich tmuxist es so gut wie screenwenn Sie einfach ein Programm / Skript ausführen möchten, das ursprünglich nicht als Daemon im Hintergrund geschrieben wurde. Wenn Sie jedoch beabsichtigen, mit dem Terminal-Multiplexer zu interagieren, empfehle ich Ihnen wärmstens tmux.
suodersudo?