python으로 작성된 모니터링 스크립트 test1.py, while True 모드에서 실행, ssh 원격일 때(putty 터미널 사용) 다음 명령을 통해 스크립트를 시작합니다.
코드는 다음과 같습니다.
python test1.py &
이제 스크립트는 정상적으로 실행되고 있으며, ps를 통해 프로세스 번호를 확인할 수 있습니다. 이때 ssh 터미널은 직접 닫힙니다. 종료 명령을 실행했지만 퍼티를 통해 직접) 버튼 실행), 다시 로그인한 후 프로세스가 종료되었음을 확인했습니다.
백그라운드 시작을 통해 문제가 해결되었습니다. 나중에 참고할 수 있도록 여기에 요약하겠습니다.
linux는 백그라운드에서 실행됩니다.
fork를 통해 구현
Linux 환경에서는 c의 데몬 프로세스가 fork를 통해 구현됩니다. Python도 이런 방식으로 구현할 수 있습니다.
코드는 다음과 같습니다.
#!/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)
upstart 메소드를 통해 구현됩니다. 🎜>
1. 파이썬 스크립트 작성
[root@local t27] # cat test123.py #!/usr/bin/env python import os,time while True : print time.time() time.sleep(1)코드는 다음과 같습니다.
[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. upstate 다시 로드
initctl reload-configuration
4. 서비스 시작
코드는 다음과 같습니다.[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. 서비스 중지
[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]#
달성 bash 스크립트를 통해
1 , Python 코드
[root@local test]# cat test123.py#!/usr/bin/env python import os,time while True : print time.time() time.sleep(1)
2. 시작 스크립트 작성
[root@local test]# cat start.sh#! /bin/sh python test123.py &코드는 다음과 같습니다.
Ssh 터미널을 직접 닫으면 프로세스가 종료됩니다.
screen, tmux 등을 통해 이루어집니다.
[root@local test]#./start.sh프로그램을 임시로 실행하고 싶다면 screen, tmux를 통해 프로그램을 시작하면 됩니다. tmux를 시작하는 방법에 대한 설명입니다.
python test123.py &터미널에 tmux를 입력하여 시작
다음 명령을 직접 실행하세요(위 스크립트 참조): python test123.py
3. SSH 터미널을 직접 닫습니다(예: Putty의 닫기 버튼). >4. 다시 SSH 접속 후 다음 명령어를 실행합니다.
코드는 다음과 같습니다.
이제 Python 프로그램이 여전히 존재하는 것을 볼 수 있습니다. 정상적으로 실행해 보세요. 위 내용은 Python 스크립트를 백그라운드에서 실행하는 여러 가지 방법에 대한 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!