Как определить сервис systemd, вызвавший bash-скрипт на исполнение? Добрый день, столкнулся с небольшой проблемой. Цель такая- в каждом из необходимых .service файлов на событие OnFailure поставить запуск скрипта, который будет отправлять через телеграм-бота уведомление о сбое того или иного сервиса. Но столкнулся с проблемой, не могу понять, как в bash-скрипте определить, какой именно сервис вызвал этот скрипт, чтобы в сообщении от бота можно было указать, что рухнул тот или иной сервис.
Для определения сервиса, вызвавшего 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 будет содержать имя сервиса, который вызвал скрипт, и это имя можно использовать в уведомлении через телеграм-бота.
Для определения сервиса, вызвавшего bash-скрипт, можно воспользоваться переменной $SERVICE_NAME, которая автоматически устанавливается systemd перед запуском OnFailure скрипта. Например:
#!/bin/bashservice_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 будет содержать имя сервиса, который вызвал скрипт, и это имя можно использовать в уведомлении через телеграм-бота.