%EC%9D%B8%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
설정하려고 하는데석묵내 서버에. 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/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