왜 내 시스템 장치가로드되었지만 비활성 (죽음)입니까? graphite.service – Carbon for Graphite

서버에서 Graphite 를 설정하려고 합니다. Carbon Cache 데몬을 아무 문제없이 시작할 수 sudo /opt/graphite/bin/carbon-cache.py start있지만 Systemd 단위로 실행하려고 애 쓰고 있습니다.

내 서비스 파일에있는 내용은 다음과 같습니다 graphite.service.

[Unit]
Description=Carbon for Graphite

[Service]
ExecStart=/opt/graphite/bin/carbon-cache.py start

[Install]
WantedBy=multi-user.target

그러나 장치를 시작하면 다음 상태가 표시됩니다.

$ systemctl status graphite.service
* graphite.service - Carbon for Graphite
   Loaded: loaded (/etc/systemd/system/graphite.service; enabled)
   Active: inactive (dead) since Fri 2014-06-13 18:44:11 UTC; 2s ago
  Process: 4525 ExecStart=/opt/graphite/bin/carbon-cache.py start (code=exited, status=0/SUCCESS)
 Main PID: 4525 (code=exited, status=0/SUCCESS)

Jun 13 18:44:11 MEADOW systemd[1]: Started Carbon for Graphite.

Journalctl은 더 이상 정보를 제공하지 않습니다.

“비활성 (비활성화) … (code = exited, status = 0 / SUCCESS)”상태 인 장치를 어떻게 해석하고 디버그해야합니까? 나는 전에 실패한 장치를 보았지만이 장치는 성공적으로로드되었지만 아직 실행되지 않고 그 의미를 모릅니다.



답변

jasonwryan의 의견에 따르면 기본값 Type=simple은 많은 Systemd 서비스 파일에서 작동 ExecStart하지만 흑연의 carbon-cache.py와 같이 스크립트 가 다른 프로세스 를 시작하고 완료 하면 작동하지 않습니다 . 이 경우 Systemd가 생성 된 프로세스가 초기 프로세스가 아닌 프로세스를 볼 수 있도록 섹션 Type=forking에서 명시 적으로 지정해야합니다 [Service].

에 설명 된대로 man systemd.service:

forking으로 설정하면 ExecStart =로 구성된 프로세스가 시작의 일부로 fork ()를 호출 할 것으로 예상됩니다. 시작이 완료되고 모든 통신 채널이 설정되면 상위 프로세스가 종료됩니다. 자식은 기본 데몬 프로세스로 계속 실행됩니다. 이것은 전통적인 UNIX 데몬의 동작입니다. 이 설정을 사용하는 경우 systemd가 데몬의 기본 프로세스를 식별 할 수 있도록 PIDFile = 옵션도 사용하는 것이 좋습니다. systemd는 상위 프로세스가 종료되는 즉시 후속 장치를 시작합니다.

흑연 별 답변

위의 문제가 Systemd 문제를 해결하는 동안 흑연 관련 문제 (Twisted 관련 문제)가 빨리 발생하여 기본값으로 돌아갔습니다 Type.

흑연 <0.9.12

이전 버전의 Graphite에서는 다음 --debug옵션 을 사용하여 포크를 피할 수 있습니다 .

[Service]
ExecStart=/opt/graphite/bin/carbon-cache.py --debug start

흑연> = 0.9.13

에서 이 풀 요청--no-daemon 옵션은 합병되었다 :

[Service]
ExecStart=/opt/graphite/bin/carbon-cache.py --no-daemon start

답변