LINUX.ORG.RU
ФорумAdmin

Прописать запуск скрипта через ExecStartPost

 


0

2

Есть некий сервис, который запускается из systemd-юнита /lib/systemd/system/coolservice.service
Нужно сделать так, чтобы сразу после запуска юнита выполнялся скрипт, запуск скрипта прописать можно в юните в опции ExecStartPost, подскажите как это сделать, не меняя текст юнита, куда-то в /etc/systemd/system это небось запендюрить надо?

★★★★★

/etc/systemd/system/coolservice.service.d/foo.conf где foo - любое имя

но не лучше ли создать для этого отдельный юнит c Requires=coolservice.service After=coolservice.service?

eternal_sorrow ★★★★★
()
Последнее исправление: eternal_sorrow (всего исправлений: 1)
Ответ на: комментарий от eternal_sorrow

Отдельный юнит, значит... ну хорошо
Давай, полностью задачу изложу.

Есть процесс, который запускается из systemd-юнита, также он создаёт pid-файл. Однако этот процесс порождает дочерний процесс, который не создаёт pid-файл, но этот процесс надо мониторить. Я создал скрипт, который вычисляет pid этого процесса и создаёт pid-файл, pid-файл нужен для сервера статистики, который каждые 5 минут подключается к нашему серверу и собирает метрики процесса. Скрипт такой:

#!/bin/bash

/bin/ps -eo pid,cmd | /usr/bin/awk '$2=="flussonic-thumbnailer" {print $1}' > /run/flussonic/flussonic-thumbnailer.pid
Создавать целый юнит для запуска скрипта с такой пустяковой функцией - всё равно, что гвозди микроскопом заколачивать, но я тем не менее именно так и сделал, текст юнита такой:
[Unit]
BindsTo=flussonic.service
After=flussonic.service

[Service]
Type=oneshot
ExecStart=/opt/scripts/flussonic-thumbnailer-getpid.sh
ExecStop=/bin/rm /run/flussonic/flussonic-thumbnailer.pid

[Install]
WantedBy=multi-user.target

В итоге что мы имеем:
скрипт через юнит запускается, но ничего не делает
сам скрипт рабочий, запускал из командной строки - pid-файл создаётся
скрипт действительно запускается, я для проверки в него добавлял строку «echo AAAA», в journalctl пишет
почему-то не срабатывает как раз правая часть однострочника, где вывод через «>»

sunny1983 ★★★★★
() автор топика
Последнее исправление: sunny1983 (всего исправлений: 2)
Ответ на: комментарий от sunny1983

У тебя всё нормально отрабатывает, сперва ExecStart, и сразу после этого ExecStop. Чтобы так не происходило, добавь в секцию [Service]: RemainAfterExit=true.

eternal_sorrow ★★★★★
()
Последнее исправление: eternal_sorrow (всего исправлений: 1)
Ответ на: комментарий от sunny1983

Я создал скрипт, который вычисляет pid этого процесса и создаёт pid-файл, pid-файл нужен для сервера статистики, который каждые 5 минут подключается к нашему серверу и собирает метрики процесса.

systemd отслежвает PID всех процессов, порождённых сервисом, так что pid-файлы не нужны. лучше научи свой сервис статистики общаться по dbus с systemd и получать всю нужную информацию оттуда

eternal_sorrow ★★★★★
()
Ответ на: комментарий от sunny1983

Создавать целый юнит для запуска скрипта с такой пустяковой функцией

вполне нормальная практика

eternal_sorrow ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.