LINUX.ORG.RU

История изменений

Исправление sunny1983, (текущая версия) :

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

Есть процесс, который запускается из 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, :

Давай, полностью задачу изложу.

Есть процесс, который запускается из 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, :

Давай, полностью задачу изложу.

Есть процесс, который запускается из 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 пишет почему-то не срабатывает как раз правая часть однострочника, где вывод через «>»