Linux 在init.d服务中运行时未找到mvn命令

Linux 在init.d服务中运行时未找到mvn命令,linux,bash,maven,Linux,Bash,Maven,我在创建init.d服务时遇到了一个问题。下面是我的run.sh文件,它执行得非常好(作为root用户) 但当我在init.d(servicererunstart)中执行与服务相同的文件时。我明白了 找不到mvn命令 以下是我的开始方法 start() { if [ -f /var/run/$PIDNAME ] && kill -0 $(cat /var/run/$PIDNAME); then echo 'Service already running' >

我在创建
init.d
服务时遇到了一个问题。下面是我的run.sh文件,它执行得非常好(作为root用户)

但当我在init.d(servicererunstart)中执行与服务相同的文件时。我明白了

找不到mvn命令

以下是我的开始方法

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
}
链接到我正在使用的完整脚本


运行方式值设置为
root

当您使用
sudo
运行命令时,实际上是以超级用户或
root
的身份运行命令

root
用户找不到您的命令的原因可能是
root
PATH
环境变量不包括
maven
所在的目录(如注释中所示)。因此出现“未找到命令”错误的原因

PATH
添加到脚本中,并确保脚本中包含
/opt/inte‌​gration/maven/apache‌​-maven-3.3.9/bin
。由于
init
脚本不会与系统的其余部分共享
PATH
环境变量(因为它在
.bash\u profile
中的
$PATH
实际更新之前运行),您需要直接在脚本上设置它,并确保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

使用
sudo
运行命令时,实际上是以超级用户或
root
身份运行命令

root
用户找不到您的命令的原因可能是
root
PATH
环境变量不包括
maven
所在的目录(如注释中所示)。因此出现“未找到命令”错误的原因

PATH
添加到脚本中,并确保脚本中包含
/opt/inte‌​gration/maven/apache‌​-maven-3.3.9/bin
。由于
init
脚本不会与系统的其余部分共享
PATH
环境变量(因为它在
.bash\u profile
中的
$PATH
实际更新之前运行),您需要直接在脚本上设置它,并确保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

你在剧本顶部的“她砰砰”是什么<代码>#/bin/sh或任何其他?是#/bin/bash在从
init.d
运行时,您能否在调用
maven
之前添加一行
echo$PATH
?看到它的内容了吗?在命令行上运行时,比较刚刚在命令行中成功运行时的
$PATH
值。我获取/usr/local/sbin:/usr/local/bin:/sbin:/usr/sbin:/usr/bin:/root/bin:/opt/integration/maven/apache-maven-3.3.9/bin,但在服务中我获取/sbin:/usr/sbin:/bin:/usr/binI以root用户身份登录。为什么不同?你在剧本顶部的“她-邦”是什么<代码>#/bin/sh或任何其他?是#/bin/bash在从
init.d
运行时,您能否在调用
maven
之前添加一行
echo$PATH
?看到它的内容了吗?在命令行上运行时,比较刚刚在命令行中成功运行时的
$PATH
值。我获取/usr/local/sbin:/usr/local/bin:/sbin:/usr/sbin:/usr/bin:/root/bin:/opt/integration/maven/apache-maven-3.3.9/bin,但在服务中我获取/sbin:/usr/sbin:/bin:/usr/binI以root用户身份登录。为什么不同?但问题是我并没有用sudo运行任何命令。默认情况下,服务是否以sudo运行?@Ahmad.Masood:但您提到的
运行方式值设置为root
?这是什么意思?但问题是我没有用sudo运行任何命令。默认情况下,服务是否以sudo运行?@Ahmad.Masood:但您提到的
运行方式值设置为root
?这是什么意思?