Per jasonwryan's comment, в то время как по умолчанию Type=simple
работает для многих Systemd служебных файлов, он не работает, когда скрипт в ExecStart
запускает другой процесс и завершает его, как в случае с carbon-cache.py графита. В этих случаях необходимо явно указать Type=forking
в разделе [Service]
, чтобы Systemd знал, что нужно смотреть на порожденный процесс, а не на исходный.
Как объяснено в man systemd.service
:
Если установлено вилку, то ожидается, что процесс, сконфигурированный с помощью При запуске ExecStart= будет вызывать fork(). Родительский ожидается, что процесс завершится после завершения запуска, и все каналы связи установлены. Ребенок продолжает работать как главный демонический процесс. Это поведение традиционных UNIX-демон. Если эта настройка используется, рекомендуется также использовать PIDFile= вариант, чтобы systemd мог идентифицировать основной процесс демона. systemd приступит к запуску последующих модулей, как только родительский процесс завершается.
В то время как вышеуказанное решило мою проблему с Systemd, я быстро столкнулся с проблемами, специфичными для графики (с Twisted) и вернулся к стандартным Type
.
В предыдущих версиях Graphite можно было избежать форкинга только с помощью опции --debug
:
[Service]
ExecStart=/opt/graphite/bin/carbon-cache.py --debug start
В этом pull request опция -нетдемон
была объединена:
[Service]
ExecStart=/opt/graphite/bin/carbon-cache.py --no-daemon start
Если вы уже настроили свой туннель от A к C через B, тогда
Вы хотите
#user@D: ssh -N user@A -L 9999:localhost:9999
#user@D: telnet localhost 9999
Вы просто создаете еще один туннель, он не подключается к существующему туннелю. Вы, вероятно, захотите вместо этого подключиться к «localhost» на машине A (вместо C, которая уже туннелирована через B от A).