Maison > Article > interface Web > Plusieurs façons d'exécuter des scripts Python en arrière-plan
Un script de surveillance test1.py écrit en python, exécuté en while mode True, démarrez le script via la commande suivante lorsque ssh distant (à l'aide du terminal putty) :
Le code est le suivant :
python test1.py &
Maintenant, le script s'exécute normalement et le numéro de processus peut être vu via ps. À ce moment, le terminal ssh est fermé directement (pas avec. la commande de sortie, mais directement via putty) bouton exécuté), après m'être reconnecté, j'ai constaté que le processus s'était sorti.
Le problème a été résolu grâce au démarrage en arrière-plan. Je vais le résumer ici pour ma future référence.
linux s'exécute en arrière-plan
implémenté via fork
Dans l'environnement Linux, le processus démon en c est implémenté via fork. Python peut également être implémenté de cette manière. L'exemple de code est le suivant :
Le code est le suivant :
#!/usr/bin/env python import time,platform import os def funzioneDemo(): # 这是具体业务函数示例 fout = open('/tmp/demone.log', 'w') while True: fout.write(time.ctime()+'\n') fout.flush() time.sleep(2) fout.close() def createDaemon(): # fork进程 try: if os.fork() > 0: os._exit(0) except OSError, error: print 'fork #1 failed: %d (%s)' % (error.errno, error.strerror) os._exit(1) os.chdir('/') os.setsid() os.umask(0) try: pid = os.fork() if pid > 0: print 'Daemon PID %d' % pid os._exit(0) except OSError, error: print 'fork #2 failed: %d (%s)' % (error.errno, error.strerror) os._exit(1) # 重定向标准IO sys.stdout.flush() sys.stderr.flush() si = file("/dev/null", 'r') so = file("/dev/null", 'a+') se = file("/dev/null", 'a+', 0) os.dup2(si.fileno(), sys.stdin.fileno()) os.dup2(so.fileno(), sys.stdout.fileno()) os.dup2(se.fileno(), sys.stderr.fileno()) # 在子进程中执行代码 funzioneDemo() # function demo if name == 'main': if platform.system() == "Linux": createDaemon() else: os._exit(0)
Il est implémenté via la méthode upstart
L'application peut être encapsulée dans un service système via upstart. L'exemple complet est enregistré directement ici.
1. Écrire un script python
Le code est le suivant :
[root@local t27] # cat test123.py #!/usr/bin/env python import os,time while True : print time.time() time.sleep(1)
2. upstatFichier de configuration
Le code est le suivant :
[root@local t27] # cat /etc/init/mikeTest.confdescription "My test"author "Mike_Zhang@live.com" start on runlevel [234]stop on runlevel [0156] chdir /test/t27exec /test/t27/test123.pyrespawn
3. Recharger upstate
Le code est le suivant :
initctl reload-configuration
4. Démarrez le service
Le code est le suivant :
[root@local t27]# start mikeTest mikeTest start/running, process 6635 [root@local t27]# ps aux | grep test123.py root 6635 0.0 0.0 22448 3716 ? Ss 09:55 0:00 python /test/t27/test123.py root 6677 0.0 0.0 103212 752 pts/1 S+ 09:56 0:00 grep test123.py
5. Arrêtez le service
Le code est le suivant :
[root@local t27]# stop mikeTest mikeTest stop/waiting [root@local t27]# ps aux | grep test123.py root 6696 0.0 0.0 103212 752 pts/1 S+ 09:56 0:00 grep test123.py [root@local t27]#
Réalisé via le script bash
1, code python
Le code est le suivant :
[root@local test]# cat test123.py#!/usr/bin/env python import os,time while True : print time.time() time.sleep(1)
2. Écrivez le script de démarrage
Si utilisez directement & pour démarrer le processus :
[root@local test]# cat start.sh#! /bin/sh python test123.py &
Le code est le suivant :
Fermez directement le terminal ssh, ce qui entraînera la fermeture du processus.
Réalisé via screen, tmux, etc.
[root@local test]#./start.sh
Si vous souhaitez exécuter le programme temporairement, vous pouvez démarrer le programme via screen, tmux Voici. une description de la façon de démarrer tmux.
1. Démarrez tmux
python test123.py &
Entrez tmux dans le terminal pour démarrer
2. Démarrez le programme dans tmuxExécutez simplement la commande suivante directement (reportez-vous au script ci-dessus) : python test123.py
3 Fermez directement le terminal ssh (comme le bouton de fermeture sur putty4. Après avoir reconnecté, exécutez la commande suivante :
Le code est le suivant :
Maintenant vous pouvez voir que le programme python est toujours là. Exécutez normalement.Fonctionner en arrière-plan sous Windows
Je ne l'ai pas étudié en profondeur sous Windows La méthode que j'utilise souvent est de modifier l'extension du script python en ". .pyw" et double-cliquez dessus. Il peut être exécuté en arrière-plan sans modifier aucun code. Ce qui précède est le contenu de plusieurs façons d'exécuter des scripts Python en arrière-plan. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !