«Правильный» способ запуска сценария оболочки в качестве демона

Как написано на странице проекта wget, в wget версии 1.16.1 были добавлены защищенные протоколы TLSv1_1 и TLSv1_2 . Ваш wget 1.15 его не поддерживает.

Ресурсы:

22
05.04.2018, 00:02
3 ответа

С помощью systemd вы сможете запускать скрипт в качестве демона, создав простой юнит. Существует множество различных опций , которые вы можете добавить, но это настолько просто, насколько это возможно.

Допустим, у вас есть скрипт /usr/bin/mydaemon.

#!/bin/sh

while true; do
  date;
  sleep 60;
done

Не забудьте sudo chmod +x /usr/bin/mydaemon.

Вы создаете подразделение /etc/systemd/system/mydaemon.service.

[Unit]
Description=My daemon

[Service]
ExecStart=/usr/bin/mydaemon
Restart=on-failure

[Install]
WantedBy=multi-user.target 

Чтобы запустить демона, которого вы запускаете

systemctl start mydaemon.service 

Чтобы начать при загрузке, включите его

systemctl enable mydaemon.service

Если в системе на основе systemd, которой сегодня является большинство дистрибутивов Linux, это не совсем внешний инструмент. Минусом будет то, что это не будет работать везде.

33
27.01.2020, 19:43

Вероятно, я что-то здесь упускаю; почему именно nohupне подходит? Конечно, одного недостаточно, но дополнить его кажется несложным делом.

#!/bin/bash

if [ "$1" = "DAEMON" ]; then
    # is this necessary? Add other signals at will (TTIN TTOU INT STOP TSTP)
    trap '' INT
    cd /tmp
    shift
    ### daemonized section ######
    for i in $( seq 1 10 ); do
        date
        sleep 5
    done
    #### end of daemonized section ####
    exit 0
fi

export PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin
umask 022
# You can add nice and ionice before nohup but they might not be installed
nohup setsid $0 DAEMON $* 2>/var/log/mydaemon.err >/var/log/mydaemon.log &

Насколько я вижу:

  • вывод перенаправляется соответствующим образом (при необходимости используйте /dev/null)
  • umask передается по наследству
  • stdinвсе равно умирает в конце родительского скрипта
  • сценарий daemon.sh изменен наinit(илиsystemd)

У меня сильное чувство, что я упускаю очевидное. Понизьте голос, но, пожалуйста, скажите мне, что это:-)

8
27.01.2020, 19:43

Команда Linux screen, содержащаяся в большинстве дистрибутивов, может демонизировать сценарий оболочки. Я использую его часто. Вот краткий пример запуска, просмотра и выхода из сеанса отсоединенного экрана...

# screen -dmS Session_Name  bash -c "while true; do date; sleep 60; done"

# screen -ls
There are screens on:
        8534.Session_Name       (04/04/2018 08:46:27 PM)        (Detached)

# screen -S Session_Name -X quit
4
27.01.2020, 19:43

Теги

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