使用服务实用程序时服务无法启动,但直接调用初始化脚本时服务可以运行

使用服务实用程序时服务无法启动,但直接调用初始化脚本时服务可以运行

我正在努力奔跑在 Ubuntu 14.04 上作为服务。我创建了以下初始化脚本 ( /etc/init.d/mule)

#!/bin/bash

JAVA_HOME=/usr/lib/jvm/java-8-oracle
PATH=$PATH:$JAVA_HOME/bin

# Set Mule related environment
MULE_HOME=/opt/mule
PATH=$PATH:$MULE_HOME/bin
RUN_AS_USER=mule

# Export environment variables
export JAVA_HOME MULE_HOME RUN_AS_USER PATH

# Invoke Mule
$MULE_HOME/bin/mule $1

在这里我定义了一些环境变量,最值得注意的是RUN_AS_USER因为我想让 Mule 以用户身份运行mule

当我拨打电话时sudo service mule start,我没有看到任何事情发生,但是当我拨打电话时sudo /etc/init.d/mule start,Mule 开始正常运行。

看看启动脚本对于 Mule,如果需要以另一个用户身份运行脚本,则在第 419 行重新启动脚本。

RELAUNCH_CMD="$REALPATH $@"
su -m $RUN_AS_USER -c "$RELAUNCH_CMD"

为什么直接调用 init 脚本时,Mule 开始正常运行,但使用服务实用程序时却没有任何反应?服务的手册页说它会删除大多数环境变量。所以我猜调用在su某种程度上取决于环境。

答案1

问题是用户mule没有 shell。它被设置为/bin/false

标志-m保存su环境,所以当我调用sudo /etc/init.d/mule start环境SHELL变量时被设置并传递给su

但在调用时,sudo service mule start环境会被清理。从service手册页中:

服务在尽可能可预测的环境中运行 System V init 脚本或 upstart 作业,删除大多数环境变量并将当前工作目录设置为 /。

因此,环境不包含SHELL变量,用户mule也没有 shell。所以似乎没有执行任何命令。

相关内容