Python으로 작성된 모니터링 스크립트 test1.py는 항상 True에서 실행됩니다. SSH가 원격 (Putty Terminal 사용)이면 다음 명령으로 스크립트를 시작합니다.
코드 사본은 다음과 같습니다.
Python test1.py &
이제 스크립트가 정상적으로 실행 중이며 PS를 통해 프로세스 번호를 볼 수 있습니다. 현재 SSH 터미널을 직접 닫습니다 (종료 명령을 사용하지 말고 퍼티의 닫기 버튼을 통해 직접 실행). 다시 로그인 한 후 프로세스가 종료되었음을 알 수 있습니다.
백그라운드 시작 방법을 통해 문제가 해결되었습니다. 다음은 다음과 같은 요약입니다. 앞으로 확인하는 것이 편리합니다.
Linux 아래의 백그라운드에서 실행됩니다
포크를 통해 구현
Linux 환경에서 C의 데몬 프로세스는 포크를 통해 구현 되며이 방법을 통해 Python도 구현할 수 있습니다. 예제 코드는 다음과 같습니다.
코드 사본은 다음과 같습니다.
#!/usr/bin/env python
가져 오기 시간, 플랫폼
OS 가져 오기
def funzionedemo () :
# 이것은 특정 비즈니스 기능 예입니다
fout = open ( '/tmp/demone.log', 'w')
사실이지만 :
fout.write (time.ctime ()+'/n')
fout.flush ()
Time.sleep (2)
fout.close ()
def createaemon () :
#fork 프로세스
노력하다:
if os.fork ()> 0 : os._exit (0)
Oserror를 제외하고 오류 :
인쇄 '포크 #1 실패 : %d ( %s)' %(error.errno, error.strerror)
os._exit (1)
os.chdir ( '/')
os.setsid ()
os.umask (0)
노력하다:
pid = os.fork ()
pid> 0 인 경우 :
'데몬 PID % D' % PID를 인쇄하십시오
os._exit (0)
Oserror를 제외하고 오류 :
'포크 #2 실패 : %d ( %s)' %(error.errno, error.strerror)
os._exit (1)
# 리디렉션 표준 io
sys.stdout.flush ()
sys.stderr.flush ()
si = 파일 ( "/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 () # 함수 데모
__name__ == '__main__':
if platform.system () == "linux":
createaemon ()
또 다른:
os._exit (0)
신생 기업을 통해 구현되었습니다
응용 프로그램은 신생 기업을 통해 시스템 서비스로 캡슐화 될 수 있으며 전체 예제는 여기에 직접 기록됩니다.
1. 파이썬 스크립트를 작성하십시오
코드 사본은 다음과 같습니다.
[root@local t27]# cat test123.py
#!/usr/bin/env python
OS, 시간을 가져옵니다
사실이지만 :
Time.Time () 인쇄
Time.sleep (1)
2. 위의 구성 파일을 쓰십시오
코드 사본은 다음과 같습니다.
[root@local t27]# cat /etc/init/miketest.conf
설명 "내 시험"
저자 "[email protected]"
Runlevel에서 시작 [234]
Runlevel에서 중지 [0156]
CHDIR /TEST /T27
exec /test/t27/test123.py
respawn
3. 위쪽으로 다시로드
코드 사본은 다음과 같습니다.
initctl Reload-Configuration
4. 서비스를 시작하십시오
코드 사본은 다음과 같습니다.
[root@local t27]# miketest 시작
Miketest 시작/실행, 프로세스 6635
[root@local t27]# ps aux | grep test123.py
루트 6635 0.0 0.0 22448 3716? SS 09:55 0:00 Python /test/t27/test123.py
루트 6677 0.0 0.0 103212 752 pts/1 s+ 09:56 0:00 Grep test123.py
5. 서비스 중지
코드 사본은 다음과 같습니다.
[root@local t27]# miketest 중지
Miketest 중지/대기
[root@local t27]# ps aux | grep test123.py
루트 6696 0.0 0.0 103212 752 pts/1 s+ 09:56 0:00 Grep test123.py
[루트@로컬 T27]#
Bash 스크립트를 통해 구현되었습니다
1. 파이썬 코드
코드 사본은 다음과 같습니다.
[루트@로컬 테스트]# cat test123.py
#!/usr/bin/env python
OS, 시간을 가져옵니다
사실이지만 :
Time.Time () 인쇄
Time.sleep (1)
2. 시작 스크립트를 작성하십시오
코드 사본은 다음과 같습니다.
[루트@로컬 테스트]# cat start.sh
#! /bin/sh
Python test123.py &
3. 프로세스를 시작하십시오
코드 사본은 다음과 같습니다.
[루트@로컬 테스트]#./start.sh
프로세스를 사용하고 직접 시작하는 경우 :
코드 사본은 다음과 같습니다.
Python test123.py &
SSH 터미널을 직접 닫으면 프로세스가 종료됩니다.
화면, TMUX 및 기타 방법을 통해 구현되었습니다
프로그램을 일시적으로 실행하면 화면 또는 TMUX를 통해 프로그램을 시작할 수 있습니다. 다음은 Tmux가 시작되는 방법에 대한 설명입니다.
1. tmux를 시작하십시오
시작하려면 터미널에 tmux를 입력하십시오
2. TMUX에서 프로그램을 시작하십시오
다음 명령을 직접 실행합니다 (위의 스크립트 참조) : Python Test123.py
3. SSH 터미널을 직접 끄십시오 (예 : 퍼티의 닫기 버튼).
4. Resshing 후 다음 명령을 실행하십시오.
코드 사본은 다음과 같습니다.
tmux 첨부
이제 Python 프로그램이 여전히 정상적으로 실행되고 있음을 알 수 있습니다.
창문 아래에서 배경으로 실행하십시오
나는 창에서 깊이 연구하지 않았다. 내가 자주 사용하는 방법은 Python 스크립트의 확장을 ".pyw"로 수정하고 코드를 수정하지 않고 배경에서 실행하도록 두 번 클릭하는 것입니다.