Я использовал следующую конфигурацию для запуска beanstalkd
обработать
[Service]
ExecStart=/usr/local/bin/beanstalkd
ExecStartPost=pgrep beanstalkd > /var/run/beanstalkd.pid
Последняя строка должна генерировать pid-файл после запуска процесса, но файл не создается. Зачем ?
Или есть другой способ принудительно создать pidfile в systemd
?
systemd не требует pidfile для службы Type = simple. Он будет управлять демоном на переднем плане. systemctl status SERVICE_NAME
покажет pid основного процесса (и любых других процессов в cgroup).
Для полноты, ваша строка ExecStartPost не работает, потому что systemd не использует оболочку для выполнения команд и не выполняет поиск $ PATH, поэтому вам придется использовать ExecStartPost=/bin/sh -c "..."
, но, как я уже сказал, линия не нужна.
Если вам все еще нужен ответ по этому поводу (или кому-то еще), вам нужен контекст оболочки для запуска pgrep, поэтому правильная команда будет
ExecStartPost=/usr/bin/zsh -c 'pgrep process_name > /var/run/process_name.pid'
Это показывает порядок руководителей снизу вверх. http://lists.fedoraproject.org/pipermail/devel/2011-July/153897.html Ваш ExecStartPost запускается до ExecStart