Führen Sie beim Booten von rc.local eine Bildschirmsitzung aus

9

Ich versuche, einen getrennten Bildschirm unter einem bestimmten Benutzer in rc.local beim Booten auszuführen. Der folgende Code ist der, den ich bisher habe, aber er funktioniert bei mir nicht. Der su-Teil scheint mir einen Fehler zu geben.

su - username -c /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'
ATLChris
quelle

Antworten:

13

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.

0xC0000022L
quelle
Ich werde es in ein paar versuchen. Das Skript, das ich ausführe, verwendet absolute Pfade. Würden Sie dies empfehlen suoder sudo?
ATLChris
1
sudoist 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.
Aquaherd
@aquaherd: Es ist das, was ich beim Schreiben im Sinn hatte, aber nicht unbedingt . Der Hinweis ist wirklich in der üblichen sudo su -... sudo(Superuser tun), su(Benutzer wechseln) ... gute Idee über die .conf
0xC0000022L
1
Ich muss sagen, ich schreibe diesen Beitrag nur wegen deiner bösen Bemerkung. Ich liebe es! Es ist ein großartiger Ersatz für den Bildschirm, da man ihn zwingen kann, eine neue Sitzung zu starten.
Der Quantenphysiker
@aquaherd sudokann eine Login-Shell problemlos starten -i.
Muru
1

Versuchen Sie sudo -u usernamestattsu - username

Prophezeiung201
quelle
1

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.

/usr/bin/sudo -u user /usr/bin/screen -dmS nameyouchoose /script/start.bash

Quelle: http://realtechtalk.com/How_to_start_screen_in_bash_script_or_from_etcrclocal_on_startup_as_a_specific_user-1980-articles

Areeb Soo Yasir
quelle