我正在努力奔跑骡在 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。所以似乎没有执行任何命令。