Script de inicialização para executar um script de shell como daemon

1

Estou usando o Debian Stretch com a versão 231-9 do systemd.

Eu preciso executar alguns scripts de shell e programas não-daemon em segundo plano, mesmo quando eu sair.

Eu costumava fazer scripts init.d simples com cabeçalho LSB e, em seguida, caso com opção start que simplesmente executa "my_script.sh > > / var / log / my_script.log 2 > & 1 &" para executar my_script.sh em segundo plano, mas agora o Systemd os mata assim que eu fecho o terminal, não importa o que eu tente: & amp ;, nohup, setsid, disown.

Você pode me ajudar a dar uma receita para um script init.d apropriado que faz com que qualquer script ou programa não-daemon seja executado como daemon?

Obrigado.

    
por spatar 03.11.2016 / 19:30

2 respostas

2

Se as suas coisas pertencem ao usuário root, então /etc/rc.local :

screen -dmS ThingOne /path/to/thing-one
screen -dmS ThingTwo /path/to/thing-two

Ou, como alternativa, para qualquer usuário (incluindo root), na tabela cron:

@reboot screen -dmS ThingOne /path/to/thing-one
# et cetera
    
por 03.11.2016 / 19:56
0

É assim que você pode definir um script como daemon:

#! /bin/sh

### BEGIN INIT INFO
# Provides:          foobar
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: foobar
# Description:       more foo for your bars
### END INIT INFO

# Carry out specific functions when asked to by the system
case "$1" in
  start)
    echo "Starting foobar "

    # example 1 - system service
    # /usr/bin/foobar --config /etc/foo.conf start

    # example 2 - run script as user
    # su --login mkaz --command "/home/mkaz/bin/my-script --cmd-args"

    ;;
  stop)
    echo "Stopping foobar"

    # example 1
    # /usr/bin/foobar --config /etc/foo.conf stop

    ;;
  *)
    echo "Usage: /etc/init.d/foobar {start|stop}"
    exit 1
    ;;
esac

exit 0

Em seguida, mova seu script para a pasta init.d & configurá-lo como executável

sudo mv foobar /etc/init.d/       # move to init.d
sudo chmod 755 /etc/init.d/foobar # make executable

Se você deseja iniciar seu script na inicialização:

update-rc.d foobar defaults 

Se você quiser remover seu script da inicialização:

update-rc.d -f foobar remove

Se você deseja iniciar seu script manualmente:

service foobar start

Fonte: link

    
por 03.11.2016 / 22:22