init.d 脚本-权限被拒绝

init.d 脚本-权限被拒绝

我正在尝试为我的服务器创建一个 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 会以具有完全不同权限集的不同用户运行。

相关内容