我正在尝试为我的服务器创建一个 init.d 脚本,该脚本应使用“pm2”启动/停止 teamspeak 服务器和一些 node.js 应用程序。这是我的脚本:
#! /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 有关吗,还是我的脚本中有一个错误?
我不明白的是,为什么在关机/启动时自动执行脚本与我使用 shell 手动启动脚本时有所不同。
答案1
看来您对 pm2 的调用没有足够的权限。如果您还没有,请尝试使用 sudo 运行它,看看它是否有效。
错误本身似乎来自 pm2,因为您的脚本没有第 29 行。
通常,在启动时 init.d 会以具有完全不同权限集的不同用户运行。