init.d
쉘 스크립트 로 데몬을 계속 시작하는 표준 방법이나 모범 사례를 찾고 있습니다.
또는 더 나은 방법으로 직접 살아남을 수있는 방법이 /etc/init.d
있습니까?
특히, 예기치 않은 종료 프로세스를 찾는 dtnd with 및 무한 루프라는 데몬이 있습니다. 데몬이 있으면 다시 깨 웁니다. 또한 주어진 시스템 사용자가 세차를 실행하도록 start-stop-daemon 도구를 사용합니다.
시작시이 dtnd 데몬을 실행하고 싶습니다. 이 동작을 달성하기 위해 start, stop 및 status 명령을 사용하여 dtnd 파일을 “랩핑”하는 init.d 스크립트를 작성했습니다.
해결하고 싶은 두 가지 질문이 있습니다.
-
init.d 셸 스크립트 에서 일부 프로세스를 유지 하는 방법이 있습니까? 표준 / 가장 좋은 방법입니까?
-
무한 루프로 프로세스를 유지하는 것이 좋습니다? 나는 그것을
respawn
달성하는 것과 같은 명령을 사용하는 것이 낫다고 생각합니다 . 맞습니까?
나는 respawn
명령 의 존재에 대해 알고 있습니다. 그게 제가 필요하지만 사이의 흐름을 이해하지 못하고 있다고 생각 /etc/init.d/
하고 /etc/init
. 누구든지 나를 도울 수 있습니까?
참고 나는 (I 만 사용할 수있어 어느 신출내기을 inittab을하지 않아도 /etc/init
, /etc/init.d
, cron
로 및 시스템 도구 start-stop-daemon
. 나는 단지 기본 도구를 의미)
시간 내 주셔서 감사합니다!
답변
데비안은 결국 시스템을 만들었으므로 systemd를 사용하는 Linux 시스템에서 시스템을 수행하는 방법입니다.
Systemd는 서비스를 자동으로 유지하는 것을 처리 할 수 있습니다. 다른 도구는 필요하지 않습니다. Restart=always
서비스 파일 [Service]
섹션에 설정되어 있는지 확인하십시오 .
# vi /etc/systemd/system/dtnd.service
[Service]
Restart=always
#...everything else...
보다 복잡한 시나리오를 위해 몇 가지 다른 옵션 도 사용할 수 있습니다.
답변
당신은 그것을 추가 할 수 /etc/inittab
와 respawn
:
d1:2345:respawn:/path/to/your/first_daemon arg1 arg2
d2:2345:respawn:/path/to/your/second_daemon arg1 arg2
더러운 해킹이지만 과거에는 이전 sysv-init 시스템에서 성공적으로 사용했습니다.
답변
이것이 데비안이 체계화 된 이유 중 하나입니다.
서비스가 다운되었거나 응답하지 않으면 sysvinit (/etc/init.d)가 감지 할 수 없습니다. 즉, 서비스를 더 이상 수행하지 않을 경우 이러한 서비스를 모니터링하고 에스컬레이션해야합니다.
아마도 가장 쉬운 방법은 systemd (RHEL7의 기본값, 다음 데비안 및 우분투 시스템에서 기본값이 됨), upstart (RHEL6, Ubuntu 12.04 및 14.04의 기본값), daemontools (예 : 언급 한 것과 같이)와 같은 다른 데몬 핸들러로 마이그레이션하는 것입니다 djb) 또는 다른 것.
서비스를 유지하는 일을하는 것은 sysvinit의 PITA 일 것입니다.
답변
가장 좋은 방법은 데몬이 처음에 멈추지 않도록하는 것입니다.
DJB의 daemontools를 보고 싶지 않을 수도 있습니다.
답변
나를위한 표준 접근법은 Monit 유틸리티 를 사용하는 것 입니다.
Monit과 같은 것을 작성하고 실행 중이거나 생성 한 데몬을 감시 할 무언가가 필요한 경우 설명에서 알 수 없습니다.