Wie führe ich einen Befehl in screen and detach aus?

Wie kann ich screen dazu bringen, einen Befehl auszuführen und dann zu trennen (dh automatisch in einem einzelnen Skript ohne weitere Eingabe über das anfängliche Starten des Skripts hinaus)? zB laufe ich myscript.sh und es startet automatisch eine Bildschirmsitzung, führt einen Befehl aus und löst sich dann.

Author: kenorb, 2012-07-29

6 answers

Dies ist eine einfache:

screen -d -m yourcommand

Von Bildschirm-Benutzerhandbuch:

-d -m
Startbildschirm im freistehenden Modus. Dadurch wird eine neue Sitzung erstellt, aber nicht daran angehängt. Dies ist nützlich für Systemstartskripte.

 164
Author: Alan Curry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-03-09 19:06:18

Um einen einzelnen Befehl im Bildschirm auszuführen und zu trennen, können Sie versuchen:

screen -dm sleep 10

Um mehrere Befehle auszuführen, versuchen Sie:

screen -dm bash -c "sleep 10; myscript.sh"

Bitte beachten Sie, dass beim Beenden eines Programms der Bildschirm (standardmäßig) das darin enthaltene Fenster beendet wird.

Wenn Sie nicht möchten, dass Ihre Sitzung nach Abschluss des Skripts beendet wird, fügen Sie am Ende exec sh hinzu, z. B.:

screen -dm bash -c 'sleep 5; exec sh'

Um alle Ihre Sitzungen aufzulisten, versuchen Sie:

screen -list

Verwandte: Unix-Bildschirm starten, Befehl ausführen, Trennen.

 60
Author: kenorb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-04-13 12:14:40

Um eine neue Sitzung im Hintergrund mit dem Namen 'sleepy'zu starten

screen -S sleepy -dm sleep 60

Um 'sleepy' Session zu töten

screen -S sleepy -X quit      
 24
Author: Michal Zmuda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-03-01 16:25:49
screen -dmS screen_session_name bash -c 'echo "doing stuff"; exec bash'
 6
Author: tkjef,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-03-14 05:40:50

Es passiert mir, wenn ich control c (sig int) drücke, um mein Programm zu beenden. es verlässt den ganzen Weg von allen bash. also fand ich das, um SIGINT zu fangen. und verhindern Sie den Austritt aus der letzten Bash. (müssen exit eingeben, um zu beenden)

screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here;  bash"


example:

screen -dmS "status_updates" bash -c "trap 'echo gotsigint' INT; cd /opt/status_update ; forever index.js ;  bash"

Ich finde es nützlich, cron zu verwenden, um nodejs-Programme beim Start auszuführen. und um den Bildschirm beim Booten auszuführen. in cron gibt es spezielle Ereignisse Syntax @reboot event

to edit cron, execute:
crontab -e

then type
@reboot screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here;  bash"
 2
Author: Shimon Doodkin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-04-29 09:38:39

Hier sind die Schritte, die Sie ausführen können, um einen Prozess im Bildschirm auszuführen, sich vom Terminal zu trennen und dann erneut anzufügen.

  1. Führen Sie einfach an der Eingabeaufforderung screen aus. Dies wird Ihnen eine neue subshell.

  2. Führen Sie Ihr gewünschtes Programm aus

  3. Trennen Sie die Bildschirmsitzung mit der Tastenfolge Ctrl-a Ctrl-d (beachten Sie, dass alle screen - Tastenbindungen mit Ctrl-a beginnen.) Dies kehren Sie zu Ihrer ursprünglichen Shell zurück und zeigen Sie eine Nachricht an "[losgelöst]", Angabe dass die Bildschirmsitzung noch läuft.

  4. Sie können dann die verfügbaren Bildschirmsitzungen auflisten, indem Sie screen -list

  5. Sie können diese Bildschirmsitzung erneut anhängen, indem Sie screen -r ausführen. Einmal wieder befestigt, können Sie dort abheben, wo Sie aufgehört haben und sehen jede Ausgabe, die während der von Ihnen angegebenen Zeit auf den Bildschirm gedruckt wurde wurden abgetrennt. Wenn Sie mehrere Bildschirmsitzungen haben, können Sie geben Sie den tty-Namen (wie von screen -list angezeigt) als Argument an an screen -r anhängen zu einer bestimmten Sitzung.

Quelle

 0
Author: Vinnie James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-09-11 13:11:32