Estoy tratando de crear un script init.d para mi servidor que debería iniciar / detener el servidor teamspeak y algunas aplicaciones node.js usando "pm2". Aquí está mi guión:
#! /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 puede ver, los scripts registran el stdout & stderr de cada comando en /log.txt.
Lo extraño es que cuando ejecuto /etc/init.d/my_service start/stop
manualmente, funciona muy bien. Pero cuando emito un reinicio, los comandos 3 pm2 fallan. Aquí está el registro que obtengo después de reiniciar la 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
¿Tienes alguna idea de lo que podría ser? ¿Está relacionado con pm2, o es un error en mi script?
Lo que no entiendo es, ¿por qué es diferente cuando el script se ejecuta automáticamente en el apagado / arranque desde que lo inicio manualmente usando el shell?
#! /bin/sh
o tienes#!/bin/sh
? El primer vistazo para SPACE slash bin slash sh ...Respuestas:
Parece que su llamada a pm2 no tiene permisos suficientes. Intenta ejecutarlo con sudo si aún no lo has hecho para ver si funciona.
El error en sí parece provenir de pm2, porque su script no tiene una línea 29.
Por lo general, al iniciar init.d se ejecuta con un usuario diferente con un conjunto de permisos bastante diferente.
fuente