2012-07-29 02:04:52 +0000 2012-07-29 02:04:52 +0000
82
82

Hoe een commando uitvoeren in scherm en losmaken?

Hoe kan ik ervoor zorgen dat screen een commando uitvoert en vervolgens loslaat (dat wil zeggen, automatisch in een enkel script zonder verdere invoer buiten het aanvankelijk starten van het script)? Ik voer bijvoorbeeld myscript.sh uit en het start automatisch een schermsessie, voert een commando uit en sluit dan af.

Antwoorden (5)

120
120
120
2012-07-29 02:20:11 +0000

Dit is een makkelijke:

screen -d -m yourcommand
49
49
49
2012-07-29 02:10:53 +0000

Om een enkel commando in het scherm uit te voeren en los te koppelen, kunt u proberen:

screen -dm sleep 10

Om meerdere commando’s uit te voeren, kunt u proberen:

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

Merk op dat wanneer een programma wordt beëindigd, screen (standaard) het venster doodt waarin het zich bevond.

Als je niet wilt dat je sessie wordt gedood nadat het script is voltooid, voeg dan exec sh toe aan het eind, bijv:

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

Om al je sessies op te sommen, probeer je:

screen -list

Gerelateerd: Unix-scherm starten, Opdracht uitvoeren, Loskoppelen .

16
16
16
2016-11-06 08:03:26 +0000

Om nieuwe sessie op de achtergrond te starten met naam ‘sleepy’

screen -S sleepy -dm sleep 60

Om ‘sleepy’ sessie te doden

screen -S sleepy -X quit
3
3
3
2018-03-14 05:40:50 +0000
screen -dmS screen_session_name bash -c 'echo "doing stuff"; exec bash'
0
0
0
2019-04-29 09:38:39 +0000

het overkwam me toen ik op control c (sig int) drukte om mijn programma af te sluiten. het sluit helemaal af van alle bash. dus ik vond dit om SIGINT op te vangen. en te voorkomen dat de laatste bash afsluit. (je moet exit typen om af te sluiten)

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"

Ik vind het handig om cron te gebruiken om nodejs programma’s te draaien bij het opstarten. en om het scherm te draaien bij het opstarten. in cron zijn er speciale events 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"