2013-06-20 9 views
5

daemon 모듈을 사용하여 프로세스를 대몬 화하려고합니다. 코드는 다음과 같습니다.Python : PID 파일로 Daemonizing 처리

이제 여기에 잠금 PID 파일이 생성됩니다. 이제이 프로그램을 실행하고 잘 돌아갑니다. 이제 PID/데몬 기능을 테스트하기 위해 프로그램의 다른 인스턴스를 시작합니다.

python test.py 

이제는 이전 인스턴스가 이미 실행 중이므로 이번에는 실행해서는 안됩니다. 두 번째 인스턴스가 시작되어 루프에 들어 왔음을 나타냅니다 (이 중 하나는 테스트 기능에서 while 루프가 아닙니다). 이 두번째 인스턴스에서 strace를 실행하면 다음과 같은 출력이 지속적으로

stat("/some-path-here/[email protected]", {st_mode=S_IFREG|0666, 
st_size=0, ...}) = 0 
select(0, NULL, NULL, NULL, {0, 100000}) = 0 (Timeout) 

link("/some-path-here/[email protected] 4e1a9720.21520", 
"/somepath/test.pid.lock") = -1 EEXIST (File exists) 

를 제공하고이 추적은 프로세스가 강제로 살해 끊임없이 나타날 때까지. lockfile 함수는 실제로 기존 잠금 파일의 존재를 감지했지만 프로그램이 종료되지 않는 문제가 있습니다. 또한이 오류가 이미 pid 파일이 표시되도록 표시하고 싶습니다.

어떻게이 작업을 수행 할 수 있습니까?

답변

2

참고 :이 대답은 python-daemon 라이브러리를 사용한다고 가정합니다.

데몬 라이브러리에는 pid 파일 생성을 처리하는 도우미 클래스 daemonDaemonRunner이 함께 제공됩니다. 그 내부를 살펴보면 잠금 파일의 유형으로 daemon.pidfile.TimeoutPIDLockFile을 사용합니다.

그래서, 당신이 중 하나에 의해이 문제를 해결할 수 있습니다 다음과 같습니다

  • 사용 daemon.DaemonRunnerdaemon.pidfile.TimeoutPIDLockFile
  • 변경합니다 pidfile의 유형을 (우리는 사용이 매우 편리 발견했다).
+0

두 번째 방법을 시도해 보았는데 더 나쁜 결과가 나타납니다. 작업 디렉토리에 pid 파일이 없으며 여전히 그 존재에 대해 불평하고 있습니다! strace를 통해 확인했습니다. – auny

+0

strace는 "open ("test.pid ", O_WRONLY | O_CREAT | O_EXCL, 0644) = -1 EEXIST (파일이 있음)" – auny