您的命令写入的原因不起作用的原因是因为您实际上没有运行您的监视命令oracle
用户。
你给第一su
调用,su - oracle; ps -ef | grep pmon; crsctl stat res -t
的命令,试图做序列的三件事为root
:首先,它调用su
产卵的交互式shell作为oracle
;在此shell退出后,它将运行ps
管道;最后,它运行crsctl
命令。由于监控命令在之后运行第二个su
已完成,因此它们以root
运行,这不是您想要的。
你的指挥最小的变化,这将使它的工作如下:
sudo su - root -c "su - oracle -c \"ps -ef | grep pmon; crsctl stat res -t\""
(请注意,你需要躲避内对引号的反斜杠,使他们不结束外引用)但是,您可以显着简化此命令:您可以进行的第一个优化是摆脱第一个su
调用。你不需要它,因为你从sudo
是已经root
:
sudo su - oracle -c "ps -ef | grep pmon; crsctl stat res -t"
你仍然可以做的更好,虽然。如果sudo
被配置为允许您切换到任何用户(而不仅仅是root
),则根本不需要使用su
。相反,只是指定要使用sudo -u
用户:
sudo -u oracle sh -c "ps -ef | grep pmon; crsctl stat res -t"
(请注意,您需要显式调用添加到sh
这样就可以运行整个命令集的如oracle
,而不仅仅是第一个sudo
的文档声称,你可以用它-i
或-s
选项这一点,但作为记录在我的测试中,他们没有工作。)
如果你想保持交互的shell作为oracle
用户该命令后,你可以简单地使最后的命令sudo
运行成为交互式shell。在这种情况下,你可能也想通过-i
到sudo
使交互shell有oracle
登录环境:
sudo -i -u oracle sh -c "ps -ef | grep pmon; crsctl stat res -t; $SHELL"
感谢您的建议。 1。以root身份登录的主要原因是以root身份和oracle身份运行命令,而不从ldap中再次提示密码。因此,我宁愿先以root身份登录,然后切换到Oracle。 2.上述2个命令以oracle身份运行'crsctl'和'ps'命令,但我仍保留在我的ldap帐户中。不过,我希望先以root身份登录,然后再以oracle身份登录,并以oracle用户身份运行这些命令。你能帮忙吗? – CoolChap007
你试过我给的命令吗?除了最初的'sudo'之外,他们都不需要任何密码,就像你原来的命令一样。我不确定我是否理解你的第二点:你的意思是说你想在两个命令运行后保留一个交互式shell作为'oracle'? –
是的。它不要求密码,但它仍然保留在我的ldap会话中,不会登录到root - > oracle会话。 是的,我想登录到oracle并保留在oracle会话中运行交互式命令... 我不想简单地运行我的LDAP用户的所有命令...我想以root登录 - > oracle到保持为oracle用户 – CoolChap007