Init.d 脚本在调用自身时获取返回代码 1,我该如何获取输出?

Init.d 脚本在调用自身时获取返回代码 1,我该如何获取输出?

我的问题是,我该如何修改脚本以便它能告诉我出了什么问题?

场景是这样的:我试图让 Sonatype Nexus 在 Ubuntu 10.04 中作为服务启动,但它就是不起作用。

(我不是在寻求有关如何运行 Nexus 的帮助,而是寻求如何从脚本中获取一些有用的输出的帮助)

它在调用时起作用

sudo /etc/init.d/nexus start

但使用时失败

sudo service nexus start

我已经在其上运行了 update-rc.d 命令,并按照说明完成了所有操作。

当 nexus init.d-script 检测到它应该以另一个用户(“nexus”)身份运行时,它会调用自身:

su -m $RUN_AS_USER -c "\"$REALPATH\" $2"

扩展为

su -m nexus -c '"/opt/nexus-2.0.2/bin/jsw/linux-x86-64/nexus" start'

在脚本中添加 -x 调试标志时。此命令导致返回代码 1。它从不执行 - 我在脚本上设置了 -x 调试标志,在脚本开头放置了带有重定向到文件的 echo 命令以进行跟踪,等等。

我无法得到任何输出来告诉我为什么命令无法执行。我尝试过在上面的脚本行后面、引号内、引号外以及我能想到的任何方式附加重定向到文件。我能得到的所有信息都是通过插入一行

echo $?

在 su 行之后输出‘1’。

有什么方法可以看到 su 命令运行时发生的情况?

答案1

可能是因为用户没有正确设置为系统用户。(不要使用 adduser 命令。)尝试删除用户 nexus 并重新添加。

sudo groupadd nexus
sudo useradd -r -g nexus nexus

不要忘记将 nexus 二进制文件和 sonatype-work 目录的主目录以及脚本将 PID 文件的目录分配给新用户。

答案2

当我锁定 nexus 用户/bin/false以用作其 shell 时,我遇到了这个问题。由于脚本的这一部分执行su作为参数传递的 shell 命令,这导致脚本立即退出。

相关内容