su username -c "./script.sh" 和 sudo -u username bash -c "./script.sh" 和 Java 类路径出现问题

su username -c "./script.sh" 和 sudo -u username bash -c "./script.sh" 和 Java 类路径出现问题

我看到一些奇怪的行为,这让我想知道运行这两个命令中的任何一个时的环境与以su username用户身份逐个使用并运行命令时的环境有何不同。

su username -c "cd /opt/scripts/ ; ./script.sh"

sudo -u username bash -c "cd /opt/scripts/ ; ./script.sh"

我在 CentOS 6 Linux 服务器上以 root 身份从 init 脚本运行这些命令。

我应该进一步指出问题是运行 java 程序的 script.sh 文件使用具有相对路径(相对于 script.sh 所在位置)的类路径指令(即 ./classes/com:./lib/common )。如果我 su 用户名,然后 cd 到 /opt/scripts 并运行 ./script.sh 它可以工作,但是脚本中的 su 和 sudo 命令似乎都存在找不到类的问题,即使我 cd在运行脚本之前到该目录。为什么会这样呢?和使用su成为用户并逐一运行命令有什么不同?

答案1

尝试比较环境:

$ sudo -s
# diff <(su username -c env) <(sudo -u username bash -c env)

例如, 的环境由中的默认sudo控制。env_*/etc/sudoers

相关内容