Назад | Перейти на главную страницу

systemd ExecStartPost не выглядит вызываемым

Я использовал следующую конфигурацию для запуска 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