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/성공)" 상태의 유닛을 어떻게 해석하고 디버깅해야 합니까?이전에 실패한 장치를 본 적이 있지만 이 장치는 성공적으로 로드되었지만 실행되지 않았으며 이것이 무엇을 의미하는지 모르겠습니다.

답변1

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

설명된 대로 man systemd.service:

분기로 설정된 경우 ExecStart=로 구성된 프로세스는 시작의 일부로 분기()를 호출해야 합니다. 시작이 완료되고 모든 통신 채널이 설정되면 상위 프로세스가 종료될 것으로 예상됩니다. 하위 프로세스는 계속해서 기본 데몬으로 실행됩니다. 이는 전통적인 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

관련 정보