%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/УСПЕХ)»?Я уже видел неисправные устройства, но это устройство успешно загружено, но не работает, и я не знаю, что это значит.
решение1
Согласно комментарию jasonwryan, хотя значение по умолчанию Type=simple
работает для многих файлов служб Systemd, оно не работает, когда скрипт запускает ExecStart
другой процесс и завершается, как в случае с carbon-cache.py от graphite. В этих случаях вам нужно явно указать Type=forking
в [Service]
разделе, чтобы Systemd знал, что нужно смотреть на порожденный процесс, а не на исходный.
Как объяснено в man systemd.service
:
Если установлено значение forking, ожидается, что процесс, настроенный с помощью ExecStart=, вызовет fork() как часть своего запуска. Ожидается, что родительский процесс завершит работу после завершения запуска и настройки всех каналов связи. Дочерний процесс продолжает работать как основной процесс-демон. Это поведение традиционных демонов UNIX. Если используется этот параметр, рекомендуется также использовать параметр PIDFile=, чтобы systemd мог идентифицировать основной процесс демона. systemd продолжит запуск последующих модулей, как только родительский процесс завершит работу.
Ответ, касающийся графита
Хотя вышеизложенное решило мою проблему с Systemd, я быстро столкнулся с проблемами, специфичными для Graphite (с 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