Почему systemd notify дает сбой моей службы, если я запускаю сценарий с sudo

Я создаю службу systemd, которая должна запускать сценарий bash с sudo privs. Я заметил, что когда я запускаю его, он навсегда зависает в "status = Activating".

Чтобы попытаться воспроизвести его, я установил игрушечный пример. У меня есть модуль systemd, который будет запускать очень простой долго работающий сценарий bash, который сразу выполняет systemd_notify, а затем зацикливается навсегда. Я запускаю сценарий с помощью sudo. Однако служба не запускается, и я получаю следующую ошибку:

Aug 20 14:21:48 ip-10-110-103-202 systemd[1]: Starting "Testing"...
Aug 20 14:21:49 ip-10-110-103-202 sudo[24772]: No status data could be sent: $NOTIFY_SOCKET was not set
Aug 20 14:21:49 ip-10-110-103-202 systemd[1]: test.service: Main process exited, code=exited, status=1/FAILURE

test.service:

[Unit]
Description="Testing"
Requires=network-online.target
After=network-online.target

[Service]
Type=notify
User=consul
Group=consul
ExecStart=/usr/bin/sudo /home/psengupta/long_test.sh

[Install]
WantedBy=multi-user.target

long_test.sh:

!/usr/bin/env bash
set -euo pipefail

systemd-notify --ready --status="Started"
while true
do
        echo "Press CTRL+C to stop the script execution"
        # Enter your desired command in this block.
done

Когда я удаляю sudo перед командой, все работает нормально! например ExecStart = / home / psengupta / long_test.sh

Почему использование sudo перед запуском сценария long_test.sh действительно приводит к сбою моей службы? Я не очень знаком с этим материалом и не уверен, почему $ NOTIFY_SOCKET не установлен с использованием команды sudo. В идеале я хотел бы установить его и запустить сценарий с помощью sudo и уведомить, когда он запускается.

1
задан 20 August 2020 в 17:40

1 ответ

Прочтите man sudo sudoers и используйте sudo -E для передачи всего набора переменных среды.

0
ответ дан 21 August 2020 в 07:54

Другие вопросы по тегам:

Похожие вопросы: