Probleem: Python-scripts Uitvoeren Na SSH-afmelding
Het uitvoeren van Python-scripts op een externe server kan stoppen wanneer de SSH-verbinding wordt verbroken. Dit probleem verhindert dat langlopende scripts hun taken voltooien. Je hebt een manier nodig om Python-scripts op de achtergrond te laten draaien nadat je bent afgemeld van een SSH-sessie.
Oplossing: Het nohup-commando Gebruiken
Wat is nohup?
Het nohup-commando, kort voor "no hangup," is een hulpmiddel waarmee je processen kunt uitvoeren die blijven draaien nadat je bent afgemeld van een shell. Het voorkomt dat het systeem het hangup-signaal (SIGHUP) naar het actieve proces stuurt wanneer de terminal wordt gesloten. Dit signaal beëindigt normaal gesproken processen die gekoppeld zijn aan de gesloten terminal.
nohup Implementeren met Python-scripts
Om nohup met je Python-script te gebruiken:
- Open je terminal of SSH-sessie.
- Ga naar de map met je Python-script.
-
Voer dit commando uit:
nohup python bgservice.py &
Het ampersand-teken (&) aan het einde van het commando vertelt het systeem om het proces op de achtergrond uit te voeren. Hierdoor kun je de terminal voor andere taken gebruiken terwijl je script draait.
Tip: Controleer Actieve Processen
Om te controleren of je nohup-proces actief is, gebruik het 'ps'-commando:
ps aux | grep python
Dit toont alle actieve Python-processen, inclusief je nohup-commando.
Output beheren met nohup
Standaard stuurt nohup de uitvoer van het commando naar een bestand genaamd "nohup.out" in de huidige map. Als je een aangepast uitvoerbestand wilt gebruiken, kun je het commando als volgt wijzigen:
nohup python bgservice.py > custom_output.log 2>&1 &
Dit commando stuurt zowel standaard uitvoer als standaard foutmeldingen naar het bestand "custom_output.log".
Alternatieve Methoden voor Achtergronduitvoering
Screen: Een Terminal Multiplexer
Screen is een terminal multiplexer waarmee je meerdere terminalsessies in één venster kunt uitvoeren. Het helpt processen actief te houden nadat je de verbinding met een SSH-sessie verbreekt.
Om Screen met je Python-script te gebruiken:
-
Start een nieuwe Screen-sessie:
screen -S my_python_script -
Voer je Python-script uit:
python bgservice.py -
Ontkoppel van de Screen-sessie door op Ctrl+A te drukken, gevolgd door D.
Om later opnieuw aan de sessie te koppelen, gebruik:
screen -r my_python_script
Tip: Meerdere Screen-sessies Beheren
Om meerdere Screen-sessies te beheren, gebruik het commando screen -ls om alle actieve sessies weer te geven. Hierdoor kun je zien welke sessies actief zijn en hun namen, waardoor het gemakkelijker wordt om te schakelen tussen verschillende achtergrondprocessen.
Tmux: Terminal Multiplexer Alternatief
Tmux is een andere terminal multiplexer zoals Screen. Het heeft meer functies en wordt vaak gezien als gebruiksvriendelijker.
Om Tmux met je Python-script te gebruiken:
-
Start een nieuwe Tmux-sessie:
tmux new -s my_python_script -
Voer je Python-script uit:
python bgservice.py -
Ontkoppel van de Tmux-sessie door op Ctrl+B te drukken, gevolgd door D.
Om later opnieuw aan de sessie te koppelen, gebruik:
tmux attach -t my_python_script
Vergeleken met Screen biedt Tmux:
- Beter vensterbeheer
- Meer aanpassingsmogelijkheden
- Eenvoudigere statusbalk-instelling
Zowel Screen als Tmux zijn goed voor het actief houden van Python-scripts op de achtergrond. De keuze tussen beide hangt vaak af van wat je prefereert.
Procesbeheer Tools
Supervisor: Een Procescontrolesysteem
Supervisor is een procescontrolesysteem voor Unix-achtige besturingssystemen. Het beheert langlopende Python-scripts. Supervisor start, stopt en bewaakt processen, en kan ze herstarten als ze crashen.
Voordelen van Supervisor gebruiken voor Python-scripts:
- Automatische herstart bij crashes
- Procesbeheer via een webinterface of commandoregel
- Logboekregistratie van procesuitvoer
- Groepeer processen voor beheer
Basis installatie en configuratie voor Supervisor:
-
Installeer Supervisor:
sudo apt-get install supervisor -
Maak een configuratiebestand aan voor je Python-script:
sudo nano /etc/supervisor/conf.d/bgservice.conf -
Voeg de volgende inhoud toe aan het bestand:
[program:bgservice] command=python /path/to/bgservice.py directory=/path/to/script/directory autostart=true autorestart=true stderr_logfile=/var/log/bgservice.err.log stdout_logfile=/var/log/bgservice.out.log -
Herlaad Supervisor en start je programma:
sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start bgservice
Tip: Omgevingsvariabelen Configureren
Om omgevingsvariabelen voor je Python-script in Supervisor in te stellen, voeg de volgende regel toe aan je configuratiebestand:
environment=ENV_VAR1="value1",ENV_VAR2="value2"
Hierdoor kun je configuratie-opties doorgeven aan je script zonder de code te wijzigen.
systemd: Systeem- en Servicebeheerder
systemd is een systeem- en servicebeheerder voor Linux-besturingssystemen. Het beheert Python-scripts als systeemservices.
systemd gebruiken voor Python-scriptbeheer:
-
Maak een servicebestand aan:
sudo nano /etc/systemd/system/bgservice.service -
Voeg de volgende inhoud toe:
[Unit] Description=Background Service Python Script After=network.target [Service] ExecStart=/usr/bin/python3 /path/to/bgservice.py Restart=always User=yourusername [Install] WantedBy=multi-user.target -
Herlaad systemd, activeer en start de service:
sudo systemctl daemon-reload sudo systemctl enable bgservice.service sudo systemctl start bgservice.service
Om je systemd-service te beheren:
- Controleer status:
sudo systemctl status bgservice.service - Stop service:
sudo systemctl stop bgservice.service - Herstart service:
sudo systemctl restart bgservice.service
Supervisor en systemd bieden oplossingen voor het beheren van langlopende Python-scripts. systemd is meer geïntegreerd in moderne Linux-systemen, terwijl Supervisor zich richt op procesbeheer.





