我在创建 init.d
服务时遇到问题。以下是我的 run.sh 文件,它执行得很好(作为 root 用户)
mvn install -DskipTests
mvn exec:java
但是当我在 init.d 中执行与服务相同的文件时(服务运行开始)。我明白了
mvn command not found
以下是我的启动方式
start() {
if [ -f /var/run/$PIDNAME ] && kill -0 $(cat /var/run/$PIDNAME); then
echo 'Service already running' >&2
return 1
fi
echo 'Starting service…' >&2
CMD="$SCRIPT &> \"$LOGFILE\" & echo \$!"
su -c "$CMD" $RUNAS > "$PIDFILE"
echo 'Service started' >&2
}
链接到我正在使用的完整脚本
RUN AS 值设置为 root
最佳答案
当您使用 sudo
运行命令时,您实际上是作为 super 用户或 root
运行它。
root
用户找不到您的命令的原因可能是 root
的 PATH
环境变量不包含所在目录maven
位于(在评论中非常明显)。因此,命令未找到错误的原因。
将 PATH
添加到您的脚本,它包含 /opt/inte gration/maven/apache -maven-3.3.9/bin
。由于 init
脚本不会与系统的其余部分共享 PATH
环境变量(因为它的运行时间远远早于 $PATH< 的实际更新
在 .bash_profile
) 你需要直接在你的脚本上设置它并确保 maven 在那里,例如,将下面的行添加到 init
脚本一开始。
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/opt/integration/maven/apache-maven-3.3.9/bin
关于linux - 在 init.d 服务中运行时找不到 mvn 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41898830/