La raison pour laquelle votre commande écrite ne fonctionne pas parce que vous n'exécutez pas réellement vos commandes de surveillance comme oracle
utilisateur.
La commande que vous donnez à la première invocation su
, su - oracle; ps -ef | grep pmon; crsctl stat res -t
, tente de faire trois choses dans l'ordre comme root
: d'une part, il appelle su
frayer un shell interactif comme oracle
; après la sortie de ce shell, il exécute le pipeline ps
; enfin, il exécute la commande crsctl
. Étant donné que les commandes de surveillance s'exécutent après le deuxième su
a terminé, ils s'exécutent comme root
, ce qui n'est pas ce que vous voulez.
Le plus petit changement à votre commande qui lui rendre le travail est la suivante:
sudo su - root -c "su - oracle -c \"ps -ef | grep pmon; crsctl stat res -t\""
(Notez que vous devez échapper à la paire intérieure de citations avec antislashs afin qu'ils ne finissent pas l'extérieur cité string.) Cependant, vous pouvez simplifier considérablement cette commande: la première optimisation que vous pouvez faire est de se débarrasser du premier appel su
. Vous n'avez pas besoin, parce que vous êtes déjà root
de sudo
:
sudo su - oracle -c "ps -ef | grep pmon; crsctl stat res -t"
Vous pouvez encore faire mieux, cependant. Si sudo
est configuré pour vous permettre de passer à n'importe quel utilisateur (pas seulement root
), vous n'avez pas besoin d'utiliser su
. Au lieu de cela, il suffit de spécifier l'utilisateur que vous souhaitez à l'aide sudo -u
:.
sudo -u oracle sh -c "ps -ef | grep pmon; crsctl stat res -t"
(Notez que vous devez ajouter un appel explicite à sh
afin que vous puissiez exécuter l'ensemble des commandes comme oracle
et non seulement la première sudo
la documentation « prétend que vous pouvez utiliser ses options pour -i
ou -s
, mais ils ne travaillaient pas comme indiqué dans mes tests.)
Si vous voulez garder un shell interactif que l'utilisateur oracle
après cette commande, vous peut simplement faire la dernière commande sudo
fonctionne comme un shell interactif. Dans ce cas, vous voulez probablement passer à -i
sudo
de sorte que le shell interactif a l'environnement de connexion de oracle
:
sudo -i -u oracle sh -c "ps -ef | grep pmon; crsctl stat res -t; $SHELL"
Merci pour la suggestion. 1.La principale raison de se connecter en tant que root est d'exécuter des commandes en tant que root et en tant qu'oracle sans mot de passe de mon LDAP. Donc, je préférerais d'abord me connecter en tant que root, puis passer à Oracle. 2. Les 2 commandes ci-dessus exécutent la commande 'crsctl' et 'ps' comme oracle, mais je reste dans mon compte ldap. cependant, je veux me connecter en tant que root d'abord puis oracle et rester en tant qu'utilisateur oracle pour exécuter ces commandes. Pourriez-vous nous aider? – CoolChap007
Avez-vous essayé les commandes que j'ai données? Aucun d'entre eux ne devrait demander un mot de passe en dehors de celui de 'sudo 'initial, tout comme votre commande d'origine. Je ne suis pas sûr de comprendre votre deuxième point: voulez-vous dire que vous voulez conserver un shell interactif comme 'oracle' après que les deux commandes aient été exécutées? –
Oui.Il ne demande pas de mot de passe, mais il reste dans ma session ldap, ne se connecte pas à la session root -> oracle. Oui. Je veux me connecter à Oracle et rester dans la session Oracle pour exécuter des commandes interactives ... Je ne veux pas simplement exécuter toutes les commandes de mon utilisateur ldap ... je veux me connecter en tant que root -> oracle à rester en tant qu'utilisateur oracle – CoolChap007