Een script op de achtergrond draaien

Wanneer je een bestand uitvoert vanuit de shell, probeert de shell het bestand uit te voeren met het gespecificeerde interpreterprogramma die op de shebang-regel is opgegeven. Om een Python script op de achtergrond te kunnen draaien dient de eerste regel in het script van de shebang voorzien te zijn:

#!/usr/bin/env python

of

#!/usr/bin/env python3

Vervolgens moeten de permissies van het bestand ingesteld zijn om uitvoering toe te staan:

chmod +x test.py

of

chmod 755 test.py

Nohup
Je kunt het script uitvoeren met nohup dat het ‘afsluit’-signaal van de terminal negeert. Dit betekent dat je de terminal kunt sluiten zonder de uitvoering van het script te stoppen. Vergeet bij het commando niet het &-teken toe te voegen zodat het script op de achtergrond wordt uitgevoerd:

nohup /path/to/test.py &

Als je geen shebang aan het bestand hebt toegevoegd, kun je in plaats daarvan het script uitvoeren met de opdracht:

nohup python /path/to/test.py &

De uitvoer wordt opgeslagen in het bestand nohup.out, tenzij je een ander uitvoerbestand opgeeft zoals hieronder:

nohup /path/to/test.py> output.log &

of

nohup python /path/to/test.py> output.log &

Je kunt het proces en het proces-ID vinden met de opdracht:

ps ax | grep test.py

Als je de uitvoering wilt stoppen, kun je deze stoppen met de opdracht kill:

kill PID

Het is ook mogelijk om het proces te stoppen met pkill, maar controleert van te voren dan wel of er geen ander script met dezelfde naam draait:

pkill -f test.py

Output buffer
Als je het uitvoerbestand nohup.out controleert tijdens de uitvoering, merk je mogelijk dat de uitvoer pas in dit bestand wordt geschreven als de uitvoering is voltooid. Dit gebeurt vanwege output buffering. Als je met het commando de parameter -u toevoegt, kun je de uitvoerbuffering vermijden:

nohup python -u ./test.py &

Of door een alternatief uitvoerbestand als log op te geven:

nohup python -u ./test.py> output.log &

Bovenstaande uitleg heeft een relatie met dit project.

Have A Nice Day!