2017-08-29 5 views
0

Je me connecte quotidiennement à plusieurs hôtes Linux en utilisant mon nom d'utilisateur LDAP, puis sudo su à l'utilisateur ROOT et ORACLE et je vérifie l'état de la base de données.exécuter plusieurs commandes lors de la connexion à l'hôte Linux

Comme je le fais tous les jours sur de nombreux hôtes Linux, je suis curieux de voir si je peux exécuter toutes les commandes en ligne de commande unique? J'ai essayé la suite, mais il n'a pas aidé how to execute multiple commands after sudo command

Exemple: Après connexion à l'aide de mon utilisateur LDAP hôte Linux, je veux exécuter des commandes suivantes en une seule commande

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

Après la connexion à la racine, puis besoin de passer à l'utilisateur Oracle, puis exécutez les commandes

Répondre

0

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 à -isudo 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" 
+0

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

+0

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? –

+0

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