PID 파일을 사용하여 프로그램을 병렬 실행하지 못하게하는 데몬이 있습니다. 나는 시그널 핸들러를 SIGTERM을 잡아두고 PID 파일을 포함하여 필요한 클린업을하도록 설정했다. 이것은 "kill -s SIGTERM #PID"를 사용하여 테스트 할 때 훌륭하게 작동합니다. 그러나 서버를 재부팅 할 때 PID 파일은 여전히 데몬 시작을 방지하기 위해 매달려 있습니다. 서버가 종료 될 때 SIGTERM이 모든 프로세스로 전송된다는 것을 이해합니다. 내 데몬에서 다른 신호 (SIGINT, SIGQUIT?)를 트래핑해야합니까?서버를 다시 시작한 후 데몬에 대해 PID 파일이 돌아가는 경우
3
A
답변
3
pidfile에 flock
(또는 lockf
)을 사용합니다. 성공하면 pidfile을 다시 쓰고 계속 진행할 수 있습니다.
This SO answer에는 이것이 수행되는 방법에 대한 좋은 예가 있습니다.
3
직접적인 해결책은 아니지만 시작시 pid 파일에서 실행중인 실제 프로세스를 확인하고 존재하지 않는 경우 오래된 파일을 정리하는 것이 좋습니다.
pid 파일을 정리하기 전에 프로세스가 SIGKILL을 받고있을 가능성이 있습니다.
2
모든 프로세스에 SIGTERM을 보낸 후에 커널은 약간의 시간 (일반적으로 약 2 또는 3 초) 기다린 다음 SIGKILL을 보냅니다. /etc/rc.d/rc0.d/S01halt
또는 유사 항목에서 찾을 수 있습니다 (배포에 따라 다를 수 있음). 당신은 충분히 빨리되지 않도록 경우
action $"Sending all processes the TERM signal..." /sbin/killall5 -15
sleep 2
action $"Sending all processes the KILL signal..." /sbin/killall5 -9
을 어느 지연을 증가하거나 빠른 있는지 확인 :
예를 들어, 내 페도라 11에, 당신은!
관련 문제
- 1. weblogic 서버를 다시 시작한 후 첫 번째로드 테스트가 실패합니다.
- 2. 서버를 다시 시작한 후 캐시 된 데이터 유지
- 3. SQL 서버를 자동으로 다시 시작한 후 프로파일 러/Traceon을 활성화하십시오.
- 4. 서버를 다시 시작한 후 사용자에게 인증하라는 메시지가 표시되지 않습니다.
- 5. CruiseControl. 서버를 다시 시작한 후의 닷넷 문제
- 6. 다시 시작한 후 SQL Server가 느려짐
- 7. 백그라운드에서 데몬에 대해 gdb를 실행하는 방법은 무엇입니까?
- 8. 기기를 다시 시작한 후 appWidget 레이아웃이 재설정됩니다.
- 9. VM에서 Tomcat을 다시 시작한 후 Youtrack이 재설정됩니다.
- 10. 다시 시작한 후 RMI 레지스트리가 비어 있습니다.
- 11. 아파치 다시 시작한 후 장고 예외가 발생했습니다.
- 12. ASP.NET 개발 서버를 시작한 .BAT 파일이 브라우저에서 열림
- 13. JPA - 서버를 다시 시작한 후 첫 번째 실행시 저장 프로 시저 호출 속도가 느립니다. 왜?
- 14. 새 파일을 복사하는 경우 서버를 다시 시작해야합니까?
- 15. cvsd 데몬에 대해 cvs init 명령을 비활성화하는 방법이 있습니까?
- 16. 실행기를 다시 시작한 후 AppWidget PendingIntent가 작동하지 않습니다.
- 17. 아파치는 설정 파일을 편집하고 다시 시작한 후 이전 DocumentRoot를 찾습니다.
- 18. 백그라운드에서 다시 시작한 후 iOS 충돌 NSAKAccessObjectContext에서 롤백을 호출합니다.
- 19. ASP.NET - AppDomain.CurrentDomain.GetAssemblies() - AppDomain을 다시 시작한 후 누락 된 어셈블리
- 20. 자동으로 searchd.production.pid 소유주를 Sphinx를 다시 시작한 후 원하는 소유자에게 변경합니다.
- 21. 응용 프로그램을 다시 시작한 후 "BindException : 주소가 이미 사용 중입니다"
- 22. 메인 모듈을 다시 시작한 후 파이썬 모듈이 업데이트되지 않음
- 23. AuthorizationExecuteWithPrivileges로 시작한 후 프로세스 종료
- 24. 글래스 피시 서버를 다시 시작해야만 속성 파일이 변경됩니다.
- 25. 게시 후 AIR 파일이 손상된 경우
- 26. Java varargs : 다시 ...- 양식으로 돌아가는 방법?
- 27. 방향으로 다시 시작한 Android 동영상
- 28. 정지 미디어 플레이어 새로운 의도를 시작한 후
- 29. iphone에서 다시 시작한 후에 언어가 변경됩니다.
- 30. iphone :보기가 숨겨진 후 반복 애니메이션을 다시 시작한 다음 다시 나타 납니까?
+1 : 전원이 끊어지면 프로세스가 신호를 보내지 않으며 같은 종류의 "일치하는 프로세스가없는 PID 파일"을 갖게됩니다. PID 파일을 찾는 것보다 더 나은 테스트가 명확하게 표시됩니다. –
pid가 다른 프로세스에서 사용되면 데몬은 이미 실행 중이라고 생각하므로 보장 할 수 없습니다. – stinkypyper
stinkypipe. pid와 double check가있는 프로세스의 이름을 항상 확인할 수 있습니다. 그것은 사소한 장애물입니다. –