su username -c“./ script.sh”和sudo -u username bash -c“./ script.sh”和Java classpath的问题

我看到一些奇怪的行为让我想知道在运行这两个命令中的任何一个时环境是如何不同的,而不是使用su用户名然后逐个用户命令运行命令.

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

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

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

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

解决方法:

尝试比较环境:

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

例如,sudo的环境由/ etc / sudoers中的env_ * defaults控制.

上一篇:Linux实战命令


下一篇:UVA 10852 Less Prime 题解