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.
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.
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.
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
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'
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"
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.
-
Führen Sie einfach an der Eingabeaufforderung
screen
aus. Dies wird Ihnen eine neue subshell. -
Führen Sie Ihr gewünschtes Programm aus
-
Trennen Sie die Bildschirmsitzung mit der Tastenfolge
Ctrl-a Ctrl-d
(beachten Sie, dass allescreen
- Tastenbindungen mitCtrl-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. -
Sie können dann die verfügbaren Bildschirmsitzungen auflisten, indem Sie
screen -list
-
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 vonscreen -list
angezeigt) als Argument an anscreen -r
anhängen zu einer bestimmten Sitzung.
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