Я пытаюсь создать сценарий init.d для моего сервера, который должен запускать / останавливать сервер teampeak и некоторые приложения node.js, используя "pm2". Вот мой сценарий:
#! /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
Как видите, сценарии записывают stdout & stderr каждой команды в /log.txt.
Странно то, что когда я запускаю /etc/init.d/my_service start/stop
вручную, это прекрасно работает. Но когда я запускаю перезагрузку, команды 3 pm2 терпят неудачу. Вот журнал, который я получаю после перезагрузки машины:
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
У вас есть идеи, что это может быть? Это связано с pm2, или это ошибка в моем скрипте?
Чего я не понимаю, так это того, почему скрипт автоматически запускается при включении / выключении при запуске вручную с помощью оболочки.