내 Systemd 장치가 로드되었지만 비활성(죽음)인 이유는 무엇입니까?

내 Systemd 장치가 로드되었지만 비활성(죽음)인 이유는 무엇입니까?

설정하려고 하는데석묵내 서버에. Carbon Cache 데몬을 문제 없이 시작할 수 있지만 sudo /opt/graphite/bin/carbon-cache.py startSystemd 장치로 실행하는 데 어려움을 겪고 있습니다.

내 서비스 파일에 있는 내용은 다음과 같습니다 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은 더 이상 정보를 생성하지 않습니다.

"비활성(죽음)...(코드=종료, 상태=0/SUCCESS)" 상태의 유닛을 어떻게 해석하고 디버깅해야 합니까?이전에 실패한 장치를 본 적이 있지만 이 장치는 성공적으로 로드되었지만 실행되지 않으며 이것이 무엇을 의미하는지 모르겠습니다.

답변1

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

설명된 대로 man systemd.service:

분기로 설정되면 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

관련 정보