Lancer shell tomcat dans shell oracle

Fermé
PICO - 29 mars 2009 à 17:47
 PICO - 29 mars 2009 à 22:16
Bonjour,

Je dois lancer à partir d'un shell oracle, un shell sous le compte tomcat.
Ce que j'ai essayé de faire :
- j'ai mis le user oracle dans le group de tomcat, j'arrive à lancer le tomcat sous le compte oracle mais le résultat dans l'appliaction n'est pas correcte (erreurs), il faut absolument de le tomcat soit lancé sous le compte tomcat.

Existe-il une possibilité de faire un su - tomcat dans le shell oracle ? Mais comment passer le mot de passe tomcat ?

Merci à celui qui déjà rencontré ce problème ... et qui a une solution (rien trouvert sur le net)

Pierre
A voir également:

10 réponses

macartur95 Messages postés 165 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 4 mai 2009 23
29 mars 2009 à 18:04
Hi,

Seul le compte root peut lancer des commandes d'un autre utilisateur .

Il y a 2 façons de faire :

vous lançez en tant que root

su - tomcat -c votre commande

ou vous passez par sudo qui donne des droits root limités à la seule commande .Il faut demander aux admins root
de mettre le script dans sudoers
0
Merci pour d'une réponse si rapide.

J'ai bien compris ce que tu me dis et je vais regarder sudo.
En attendant, voilà ce que je voudrais faire pour contourner le problème.
Ecrire un shell tomcat_oracle.sh sous root avec :

su - tomcat -c script_arret_tomcat.sh (arret tomcat)
su - oracle -c mon_script_bkp_offline.sh (backup offline base oracle)
su - tomcat -c script_demarrage_tomcat.sh (demarrage tomcat)

et en crontab :

00 03 * * * * /quelque_part/tomcat_oracle.sh

Est-ce que tu penses que c'est jouable ?

Merci d'avance.
PICO
0
macartur95 Messages postés 165 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 4 mai 2009 23
29 mars 2009 à 18:37
Hi,

cela marchera mieux comme ça dans la crontab

00 03 * * * * su - tomcat -c "script_arret_tomcat.sh"

et dans la crontab de l'user tomcat

00 03 * * * * sudo /....../script_arret_tomcat.sh


mais il faut mettre en place sudo et c'est ce qui est très utilisé/obligatoire dans le milieu pro simplement pour limité les accès au compte root car on est root on ne donne pas n'importe droits aux utilisateurs sinon clash et problème de sécurité.....l'erreur est humaine mais on en bave pour remettre un système Linux/Unix en état de re marche.
0
Tu as raison malheureusement j'ai déjà mis un certain nombre de scripts en production sans sudo.
Je vais voir avec le RSSI.

A part ça, je n'arrive pas à comprendre pourquoi pendant l'exécution de BackupOffline_Db.sh
dans la crontab ou à la ligne de commande BackupOffline_Db.sh :

00 03 * * * su - oracle -c "/xxx/BackupOffline_Db.sh BASE"

le script reste avec l'environnement de root. Comme il est impossible de se connecter à la base avec un autre compte que celui d'oracle la sauvegarde n'est pas effectuée.
J'ai tracé l'exécution de BackupOffline_Db.sh avec set -x et "id" = root.

-----------------------------------------------------------------
BackupOffline_Db: Debut backup base TEST le 29/03/09 a: 19:08:12
-----------------------------------------------------------------

ID.....
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

La base TEST est actuellement DEMARREE,
la sauvegarde peut commencer ...

ERROR:
ORA-01031: insufficient privileges


SP2-0640: Not connected
SP2-0640: Not connected

La connexion a la base n'est pas possible (Pb serveur Oracle, listener ou reseau),
=> la sauvegarde est interrompue (sortie par exit.)

Peut-être as-tu une nouvelle solution pour ce problème ?

Merci d'avance.
PICO
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
macartur95 Messages postés 165 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 4 mai 2009 23
29 mars 2009 à 19:50
Hi,

Dans le script BackupOffline_Db.sh il faut charger au début dans le script , l'environnement de l'user Oracle du style
. /home/oracle/oracle.env en génèral et entre le . et le / il y a 2 espaces pour dire que l'on charge l'environnement d'un utilisateur
0
Voilà ce qu'il y a au début du script : (ce script fonctionne très bien sous le compte oracle)
#set -x
. $HOME/EnvExploitOracle.sh

BASE=$1
if [ $# != 1 ]
then
printf "\nusage: BackupOffline_Db <BASE> \n\n"
exit
fi

EnvExploitOracle.sh :
echo $HOME
/home/oracle

#!/bin/ksh
SHELL=/bin/ksh
export SHELL
umask 022

NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P15; export NLS_LANG

#ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data; export ORA_NLS33

TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR

ORACLE_BASE=/SAN/oracle; export ORACLE_BASE
ORACLE_HOME=/opt/oracle/product/10.2.0/db_1; export ORACLE_HOME
#ORACLE_SID=TSH1; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
#LD_ASSUME_KERNEL=2.4.1; export LD_ASSUME_KERNEL

#ulimit -p 16384 ulimit -n 65536

umask 022
... + les variables d'environnement :

# -------- Paths Exploit/TEST database ------------

PATH_TXT_TEST=/SAN/oradata/Exploit/TEST/txt
PATH_CTL_TEST=/SAN/oradata/Exploit/TEST/ctl
PATH_DATA_TEST=/SAN/oradata/Exploit/TEST/data
0
macartur95 Messages postés 165 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 4 mai 2009 23
29 mars 2009 à 20:05
Hi,

il faut lancer le script sous le user oracle pour la sauvegarde Oracle car c'est lui le propriétaire de la base,les autres comptes peuvent seulement lire/ecrire lancer des requetes sql mais le compte dba c'est oracle et personne d'autre,c'est comme ca chez nous
0
Merci pour ta réponse. Bien reçu c'est oracle qui arrête ses bases.

C'est tellement vrai que maintenant quand je me connecte à la base j'ai ce message d'erreur :

# export ORACLE_SID=TEST
# sqlplus /nolog
SQL> connect /as sysdba
ERROR:
ORA-01031: insufficient privileges

Sur le net j'ai trouvé:
- ORACLE_SID doit différent de DBNAME (c'est le cas)
- qu'il fallait refaire le fichire orapwTEST de mot de passe (je n'en ai pas défini sur la base TEST).

Si je peux encore abuser, as-tu une idée sur ce problème.

Merci encore.
PICO
0
macartur95 Messages postés 165 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 4 mai 2009 23
29 mars 2009 à 20:48
Hi,

Je ne suis pas dba malgré que j'ai suivi les cours dba1/2 pour piger comment fonctionne Oracle , je suis admin unix/linux ; mais d'après le message c'est pas le user sysdba qui est le propriétaire de la base (créateur de la base) ,il a pas assez de droit.

Si le ton problème perdure je peux demander demain à mes collègues dba, chacun son métier sinon je serais dba
oracle ou sapeur mais je préfère le système.
0
Le problème était lié au fait que j'avais mis le user oracle dans le group tomcat en espérant que oracle pourrait arrêter le tomcat, erreur.
J'ai rétabli la situation et les connexions aux base Oracle sont OK maintenant.
Donc le problème est soldé.

Un grand merci pour ton aide et ta persévérance à m'avoir aidé dans ces problèmes.

Bonne fin de dimanche et très bonne semaine.
PICO
0