O script de inicialização da Debian não inicia

0

Estou tentando fazer uma carga de script específica no início do Debian.
Eu tentei colocar o script em /etc/rc.local mas sem sucesso.
Agora eu fiz um script de serviço que executa o meu script específico. O código do script de serviço é:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          script
# Required-Start:    $local_fs $network $named $time $syslog
# Required-Stop:     $local_fs $network $named $time $syslog
# Default-Start:     5
# Default-Stop:      0 1 6
# Short-Description: Start script at boot time
# Description:       Enable service .
### END INIT INFO

case "$1" in
  start)
    echo "Starting script"
    /usr/local/bin/script1
    ;;
  stop)
    echo "Stopping script"
    ;;
  *)
    echo "Usage: /etc/init.d/script {start|stop}"
    exit 1
    ;;
esac

exit 0

Agora posso testar se meu script é executado como um serviço usando sudo service <script> start

Meu código de /usr/local/bin/script1 é:

#!/bin/sh

exec 5> >(logger -t $0)
BASH_XTRACEFD="5"
PS4='$LINENO: '
set -x

FILE=/share/_ngrok
NAO_ESTA_ESCRITO=0

touch $FILE
/usr/local/bin/ngrok tcp 22 --region eu > /dev/null &
sleep 5
URL='/usr/local/bin/ngrok_url'
grep -q -F "$URL" $FILE || NAO_ESTA_ESCRITO=1
if [ $NAO_ESTA_ESCRITO -eq 1 ]; then
  /usr/local/bin/ngrok_url > $FILE
  /usr/bin/drive push -no-prompt -quiet $FILE
fi
exit 0

Quando executo /usr/local/bin/script1 do bash, ele é executado com êxito, mas quando executo sudo service servicescript start ele não é executado com êxito. Mas quando eu faço sudo service servicescript otherarg ele é executado com sucesso, então o script de serviço está bem configurado. É apenas o start que não funciona no serviço.
Quando faço sudo service servicescript start , recebo este erro:

Job for script.service failed. See 'systemctl status script.service' and 'journalctl -xn' for details.

Quando eu faço systemsctl status script.service , recebo esta mensagem:

● script.service - Info
Loaded: loaded (/etc/systemd/system/script.service; enabled)
Active: failed (Result: exit-code) since Qui 2017-03-23 17:19:25 WET; 2min 35s ago
Process: 7710 ExecStop=/usr/local/bin/killscript (code=exited, status=0/SUCCESS)
Process: 11689 ExecStart=/usr/local/bin/script1 (code=exited, status=2)
Main PID: 11689 (code=exited, status=2)

    
por alexandre1985 24.03.2017 / 15:36

1 resposta

0

Parece que você está misturando todos os três sistemas init:

  • sysVinit /etc/init.d/daemon start/stop/restart
  • upstart service daemon start
  • systemd systemsctl status script.service

Descubra qual é o seu sistema init

 stat /proc/1/exe    

File: '/proc/1/exe' -> '/lib/systemd/systemd'

Portanto, é o systemd que é o mais recente e novo padrão.

Aqui está um link para um howto: Como executar automaticamente o script de shell na inicialização de inicialização no systemd Linux

Lembre-se de que as shells não interativas não têm o conjunto env como PATH , você precisa definir o PATH ou fornecer o caminho completo para cada comando, como /bin/sleep .

Ao usar systemd , talvez você queira usar journald em vez de arquivos de log. Nesse caso, você substituiria logger por systemd-cat .

    
por 24.03.2017 / 19:26