2017-08-29 63 views
0

我使用我的LDAP用戶名登錄多臺Linux主機,然後使用sudo su登錄到ROOT和ORACLE用戶並檢查數據庫狀態。因爲我在很多Linux主機上每天都這樣做,所以我很好奇我是否可以在單個命令行中運行所有命令? 我嘗試以下,但它並沒有幫助 how to execute multiple commands after sudo command在登錄Linux主機時運行多個命令

例子:我登錄使用我的LDAP用戶Linux主機後 ,我想在一個命令

sudo su - root -c "su - oracle; ps -ef |grep pmon; crsctl stat res -t "

運行以下命令登錄到root後,需要切換到oracle用戶,然後運行命令

回答

0

您的命令寫入的原因不起作用的原因是因爲您實際上沒有運行您的監視命令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。在這種情況下,你可能也想通過-isudo使交互shell有oracle登錄環境:

sudo -i -u oracle sh -c "ps -ef | grep pmon; crsctl stat res -t; $SHELL" 
+0

感謝您的建議。 1。以root身份登錄的主要原因是以root身份和oracle身份運行命令,而不從ldap中再次提示密碼。因此,我寧願先以root身份登錄,然後切換到Oracle。 2.上述2個命令以oracle身份運行'crsctl'和'ps'命令,但我仍保留在我的ldap帳戶中。不過,我希望先以root身份登錄,然後再以oracle身份登錄,並以oracle用戶身份運行這些命令。你能幫忙嗎? – CoolChap007

+0

你試過我給的命令嗎?除了最初的'sudo'之外,他們都不需要任何密碼,就像你原來的命令一樣。我不確定我是否理解你的第二點:你的意思是說你想在兩個命令運行後保留一個交互式shell作爲'oracle'? –

+0

是的。它不要求密碼,但它仍然保留在我的ldap會話中,不會登錄到root - > oracle會話。 是的,我想登錄到oracle並保留在oracle會話中運行交互式命令... 我不想簡單地運行我的LDAP用戶的所有命令...我想以root登錄 - > oracle到保持爲oracle用戶 – CoolChap007