Ich denke, beide -c
Parameter ( su
und 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 bash
in 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 tmux
versuchst 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 tmux
Standardwerten 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 tmux
ist es so gut wie screen
wenn 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
.
su
odersudo
?sudo
ist keine gute Wahl, wenn Sie von rc.local aus ausführen, wo Sie bereits root sind, da Sie eine Login-Shell vermissen. Auf einer Seite zur Kenntnis, einen Blick auf/etc/init/tty1.conf
- ersetzen [a] getty mit Bildschirm hier.sudo su -
...sudo
(Superuser tun),su
(Benutzer wechseln) ... gute Idee über die .confsudo
kann eine Login-Shell problemlos starten-i
.Versuchen Sie
sudo -u username
stattsu - username
quelle
Folgendes habe ich verwendet: Ich fand es am saubersten und einfachsten (selbst getestet):
Ersetzen Sie "Benutzer" durch den Benutzer, um es als auszuführen. Ersetzen Sie "nameyouchoose" als Namen der Bildschirmsitzung. Ersetzen Sie "/script/start.bash" durch den Pfad Ihres Skripts.
Quelle: http://realtechtalk.com/How_to_start_screen_in_bash_script_or_from_etcrclocal_on_startup_as_a_specific_user-1980-articles
quelle