Опция StandardOutput systemd не работает

Я использую systemd, чтобы запустить программу при загрузке и держать его работает в фоновом режиме.

Я написал простой скрипт systemd позвонить и скрипт выведет несколько строк логов которые я хотел бы видеть в терминале.

Я StandardOutput=journal+console в конфигурации сервиса, но я не смог увидеть выходы ни в терминале, ни журнал.

frederick@Frederick-PC:~$ sudo systemctl start my_program.service
frederick@Frederick-PC:~$ journalctl _SYSTEMD_UNIT=my_program.service
No journal files were found.
-- No entries --

и эти моя конфигурация обслуживания и сценарий.

в/etc/systemd в/системы/my_program.служба

[Unit]
Description=Start my_program client after system is booted

[Service]
Type=forking
ExecStart=/usr/bin/my_program.sh start
ExecStop=/usr/bin/my_program.sh stop
PIDFile=/run/my_program.pid
WorkingDirectory=/home/frederick/Applications/my_program-go/
StandardOutput=journal+console

[Install]
WantedBy=multi-user.target

/usr/bin/my_program.sh

#!/bin/sh

start() {
    if [ -f /run/my_program.pid ]; then
        kill -0 $(cat /run/my_program.pid) > /dev/null 2>&1
        if [ $? -eq 0 ]; then
            echo "my_program has been already started"
            exit 1
        fi
    fi
    echo -n "Starting my_program... "
    nohup /home/frederick/Applications/my_program-go/my_program-local -c /home/frederick/Applications/my_program-go/config.json >> /home/frederick/Applications/my_program-go/my_program.log 2>&1 &
    if [ $? -gt 0 ]; then
        echo "failed"
        rm /run/my_program.pid > /dev/null 2>&1
    else
        echo $! | tee /run/my_program.pid
    fi
}

stop() {
    if [ -f /run/my_program.pid ]; then
        echo -n "Stopping my_program... "
        msg=$(kill $(cat /run/my_program.pid) 2>&1)
        if [ $? -gt 0 ]; then
            echo "failed"
            echo $msg
        else
            rm /run/my_program.pid > /dev/null 2>&1
            echo "succeeded"
        fi
    else
        echo "my_program not started"
    fi
}

restart() {
    stop
    start
}

case  in
    start|stop|restart)
        ""
        ;;
    *)
        echo "No such operation"
        exit 1
        ;;
esac

как я могу видеть эти строки, напечатанные echo в скрипте? Пожалуйста, помогите, спасибо.

27
задан Frederick Zhang
27.12.2022 15:51 Количество просмотров материала 3238
Распечатать страницу

1 ответ

Я написал простой скрипт для systemd для вызова ...

... который был источником проблемы. Ваш" простой скрипт " перезаписал стандартный вывод и стандартную ошибку. И это совершенно излишне. Все перенаправления, запись PID файлов,nohup - ing, и разветвление совершенно не нужно для чего-то, что уже демонизированной и уже имеет свой PID известный сервис-менеджер. Вам не нужна никакая часть этого сценария вообще. Вместо этого напишите свой сервисный модуль так:

[Unit]
Description=Start my_program client after system is booted

[Service]
Type=simple
ExecStart=/home/frederick/Applications/my_program-go/my_program-local -c /home/frederick/Applications/my_program-go/config.json
WorkingDirectory=/home/frederick/Applications/my_program-go/
StandardOutput=journal+console

[Install]
WantedBy=multi-user.target

вызовите любые параметры, необходимые для остановки разветвления программы, если она на самом деле определенно не реализует протокол готовности к разветвлению. Очень немногие программы На самом деле. Ваш "простой скрипт", конечно, не так, как он покинул родительский процесс задолго до Деймона был инициализирован и готов.

более дальнеишее чтение

  • Jonathan de Boyne Pollard (2015). systemd дом ужасов. Часто Задаваемые Вопросы.
  • Systemd убивает службу сразу после запуска
  • Yocto службы Linux-скрипт проблема
  • systemd.exec man-страницы (а также systemd.service и systemd.unit). Человек страница говорит:файлы конфигурации модулей для служб, сокетов, точек подключения и устройств подкачки совместно используют подмножество параметров конфигурации, определяющих выполнение среда порожденных процессов. Данная страница содержит параметры конфигурации разделяют эти четыре типа.
4
отвечен JdeBP 2022-12-28 23:39

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх