Ein in Python geschriebenes Überwachungsskript test1.py, das im while True-Modus ausgeführt wird. Starten Sie das Skript über den folgenden Befehl, wenn SSH remote (mit Putty-Terminal) ist:
Der Code lautet wie folgt:
python test1.py &
Jetzt läuft das Skript normal und die Prozessnummer kann über ps angezeigt werden. Zu diesem Zeitpunkt ist das SSH-Terminal direkt geschlossen (nicht mit Nachdem ich mich erneut angemeldet hatte, stellte ich fest, dass der Prozess beendet war.
Das Problem wurde durch den Hintergrundstart gelöst. Ich werde es hier für meine zukünftige Referenz zusammenfassen.
Linux läuft im Hintergrund implementiert durch Fork
In der Linux-Umgebung wird der Daemon-Prozess in c durch Fork implementiert. Python kann auch auf diese Weise implementiert werden:
Der Code lautet wie folgt:
#!/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)
Die Anwendung kann über upstart in einen Systemdienst gekapselt werden. Das vollständige Beispiel ist hier direkt aufgezeichnet.
Der Code lautet wie folgt:
[root@local t27] # cat test123.py #!/usr/bin/env python import os,time while True : print time.time() time.sleep(1)
2 upstat
Konfigurationsdatei
Der Code lautet wie folgt:
[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
Der Code lautet wie folgt:
initctl reload-configuration
Der Code lautet wie folgt:
[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. Stoppen Sie den Dienst
Der Code lautet wie folgt:
[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]#
1, Python-Code
Der Code lautet wie folgt:
[root@local test]# cat test123.py#!/usr/bin/env python import os,time while True : print time.time() time.sleep(1)
2. Startskript schreiben
Wenn Sie & direkt verwenden, um den Prozess zu starten:
[root@local test]# cat start.sh#! /bin/sh python test123.py &
Schließen Sie das SSH-Terminal direkt, wodurch der Prozess beendet wird.
Erreicht über screen, tmux usw.
[root@local test]#./start.sh
1. Starten Sie tmux
python test123.py &
2. Starten Sie das Programm in tmux
Führen Sie einfach den folgenden Befehl direkt aus (siehe Skript oben): python test123.py
3. Schließen Sie das SSH-Terminal direkt (z. B. die Schaltfläche „Schließen“ auf Putty); >
4. Führen Sie nach dem erneuten Hochfahren den folgenden Befehl aus:
Der Code lautet wie folgt:Jetzt Sie können sehen, dass das Python-Programm noch vorhanden ist. Führen Sie es normal aus.
Laufen im Hintergrund unter WindowsIch habe es unter Windows nicht eingehend studiert. Die Methode, die ich oft verwende, besteht darin, die Erweiterung des Python-Skripts in „zu ändern“. .pyw“ und doppelklicken Sie darauf. Es kann im Hintergrund ausgeführt werden, ohne dass Code geändert werden muss.
Das Obige ist der Inhalt verschiedener Möglichkeiten, Python-Skripte im Hintergrund auszuführen. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!