您的命令寫入的原因不起作用的原因是因爲您實際上沒有運行您的監視命令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