linux - 在 init.d 服务中运行时找不到 mvn 命令

标签 linux bash maven

我在创建 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
}

链接到我正在使用的完整脚本

https://gist.githubusercontent.com/naholyr/4275302/raw/9df4ef3f4f2c294c9585f11d1c8593b62bdd52d3/service.sh

RUN AS 值设置为 root

最佳答案

当您使用 sudo 运行命令时,您实际上是作为 super 用户或 root 运行它。

root 用户找不到您的命令的原因可能是 rootPATH 环境变量不包含所在目录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/inte‌​gration/maven/apache‌​-maven-3.3.9/bin

关于linux - 在 init.d 服务中运行时找不到 mvn 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41898830/

相关文章:

bash - 通过cli测试AWS lambda函数

regex - 这个 BASH shell 脚本摘录有什么作用?

java - pom中包含多个src文件夹

maven - 如何要求 IntelliJ 使用包装的 maven(mvnw 或 mvnw.cmd)?

python - Linux Python 2.7 odbc 连接到 Progress Open Edge DB

c - 是否可以通过IPC消息传递队列发送信号?

linux - 将 .TXT 转换为 .XLSX,并保留每个单元格的数据类型 "Text"

c++ - 在 C++ 中使用 dlopen() 和 dlsym() 从 .so 库中获取对象

python - 更改电子表格中每个单元格中首字母的大小写

maven - 如何使用 Maven 持续构建和部署功能分支?