설정하려고 하는데석묵내 서버에. 아무 문제 없이 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은 추가 정보를 생성하지 않습니다.
"비활성(죽음)...(코드=종료, 상태=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