Как определить сервис systemd, вызвавший bash-скрипт на исполнение? Добрый день, столкнулся с небольшой проблемой. Цель такая- в каждом из необходимых .service файлов на событие OnFailure поставить запуск скрипта, который будет отправлять через телеграм-бота уведомление о сбое того или иного сервиса. Но столкнулся с проблемой, не могу понять, как в bash-скрипте определить, какой именно сервис вызвал этот скрипт, чтобы в сообщении от бота можно было указать, что рухнул тот или иной сервис.

21 Авг 2019 в 06:50
223 +1
0
Ответы
1

Для определения сервиса, вызвавшего bash-скрипт, можно воспользоваться переменной $SERVICE_NAME, которая автоматически устанавливается systemd перед запуском OnFailure скрипта. Например:

#!/bin/bash
service_name=$1
# Отправляем уведомление через телеграм-бота о сбое сервиса
telegram_message="Сбой сервиса $service_name"
curl -s -X POST https://api.telegram.org/bot<token>/sendMessage -d chat_id=<chat_id> -d text="$telegram_message"

Затем в .service файле, в секции [Unit], можно указать вызов скрипта с передачей имени сервиса в качестве аргумента:

[Unit]
Description=Some service
After=network.target
[Service]
Type=simple
ExecStart=/path/to/service_executable
Restart=on-failure
RestartSec=5s
StartLimitInterval=0
Environment=SERVICE_NAME=Some service
[Install]
WantedBy=multi-user.target
OnFailure=/path/to/telegram_script.sh %N

Таким образом, когда сервис упадет и будет вызван скрипт, переменная $SERVICE_NAME будет содержать имя сервиса, который вызвал скрипт, и это имя можно использовать в уведомлении через телеграм-бота.

20 Апр 2024 в 13:12
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир