init.d script - Permissão negada

1

Estou tentando criar um script init.d para meu servidor que deve iniciar / parar o servidor teamspeak e alguns aplicativos node.js usando "pm2". Aqui está meu script:

#! /bin/sh

### BEGIN INIT INFO
# Provides:          my_service
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts/stops all my services
# Description:       starts/stops all my services
### END INIT INFO

echo "running script with argument: $1" >> /log.txt

case "$1" in
  start)
    /usr/local/bin/pm2 resurrect >> /log.txt 2>&1
    /home/teamspeak/ts3server_startscript.sh start >> /log.txt 2>&1
    ;;
  stop)
    /usr/local/bin/pm2 dump >> /log.txt 2>&1
    /usr/local/bin/pm2 delete all >> /log.txt 2>&1
    /home/teamspeak/ts3server_startscript.sh stop >> /log.txt 2>&1
    ;;
esac

echo "done" >> /log.txt

Como você pode ver, os scripts registram o stdout & stderr de todos os comandos para /log.txt.

O mais estranho é que quando eu executo /etc/init.d/my_service start/stop manualmente, ele funciona muito bem. Mas quando eu emito uma reinicialização, os comandos 3 pm2 falham. Aqui está o log que eu recebo após uma reinicialização da máquina:

running script with argument: stop
exec: 29: : Permission denied
exec: 29: : Permission denied
Stopping the TeamSpeak 3 serverdone
done
running script with argument: start
exec: 29: : Permission denied
Starting the TeamSpeak 3 server
TeamSpeak 3 server started, for details please view the log file
done

Você tem alguma idéia do que isso poderia ser? Isso está relacionado a pm2 ou é um bug no meu script?

O que eu não entendo é, por que é diferente quando o script é executado automaticamente no poweroff / boot quando eu inicio manualmente usando o shell.

    
por Van Coding 20.05.2014 / 09:40

1 resposta

1

Parece que sua chamada para pm2 não tem permissões suficientes. Tente executá-lo com o sudo se você ainda não viu se funciona.

O erro em si parece vir de pm2, porque seu script não tem uma linha 29.

Normalmente, na inicialização, o init.d é executado com um usuário diferente, com um conjunto bastante diferente de permissões.

    
por 20.05.2014 / 09:45

Tags