Script init.d: ​​permiso denegado


1

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/stopmanualmente, 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?


¿Realmente tienes #! /bin/sho tienes #!/bin/sh? El primer vistazo para SPACE slash bin slash sh ...
Hennes

Además, publique el resultado de ls -l en ese script para que podamos verificar si el bit x está configurado.
Hennes

¿Cuál es la línea 29? También debe configurar la RUTA (también está trabajando en directorios no estándar (para guión de inicio). ¿Establece los permisos ejecutables en el guión y en pm2? Supongo que en "/etc/init.d/my_service start / stop "te refieres al espacio en lugar del último corte.
Giacomo Catenazzi

Respuestas:


1

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.


No tengo instalado sudo :( ¿Hay otra forma de ejecutar el script como root?
Van Coding

Bueno, entonces usa el comando "su" y ejecuta los comandos como root de esa manera.
private_meta

¿No pedirá la contraseña entonces?
Van Coding

Bueno, por supuesto que lo hace. Solo puede ejecutar comandos como root si tiene la contraseña o si root la configuró para obtener permisos de root a través de sudo. Como no tiene este último, necesita la contraseña de root para ejecutar aplicaciones como root. Si no los tiene, debe buscar otras opciones. Verifique sus permisos para pm, o tal vez simplemente no pueda escribir un archivo de registro en la carpeta raíz (intente escribir el registro en una carpeta para la que tenga permisos).
private_meta

Tengo la contraseña, pero no quiero que mi servidor pueda reiniciarse sin tener que escribir la contraseña cada vez. Entonces, ¿la única solución es instalar sudo?
Van Coding
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.