Basis van Linux en de opdrachtregel
Op een server die via SSH is bereikt, werd een langdurige taak gestart met „./run.sh &”, en toen de verbinding werd verbroken, stopte de taak ook. Wat is de meest geschikte manier om de taak te starten zodat die blijft draaien nadat de verbinding is verbroken?
- A./run.sh > run.log 2>&1 &
- Bnice -n 19 ./run.sh > run.log 2>&1 &
- Cnohup ./run.sh > run.log 2>&1 &
Antwoord en toelichting tonen
Antwoord: C. nohup ./run.sh > run.log 2>&1 &
Wanneer de verbinding wegvalt, wordt SIGHUP, dat meldt dat de terminal is opgehangen, naar de shell gestuurd, en shells zoals bash sturen SIGHUP ook naar hun jobs. De standaardreactie op SIGHUP is stoppen, dus ook achtergrondjobs stoppen. nohup start het commando zo dat het SIGHUP negeert, en als de uitvoer met een omleiding naar een bestand gaat, blijft de taak draaien nadat de verbinding is verbroken. Als het zonder omleiding van de uitvoer vanuit een terminal wordt gestart, schrijft nohup de uitvoer naar een bestand met de naam nohup.out. Een andere veelgebruikte aanpak is een tool zoals tmux of screen, die de terminalsessie op de server in stand houdt, zodat je je later opnieuw met hetzelfde scherm kunt verbinden.
Verder: nog 9 vragen over Basis van Linux en de opdrachtregel