我的问题是,我该如何修改脚本以便它能告诉我出了什么问题?
场景是这样的:我试图让 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 命令,这导致脚本立即退出。