Pb crontab

Résolu/Fermé
audrey - 9 déc. 2008 à 11:54
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 12 déc. 2008 à 16:15
Bonjour,

je suis sous Linux

je veux exécuter un script tous les jours.
Ce script se nomme :
/home/oracle/export/export_base

Il correspond à une extraction de base Oracle.

Si en ligne de commande, je fais :
bash /home/oracle/export/export_base
le script s'exécute sans erreur

Si dans crontab -e, j'écris

45 11 * * 1,2,3,4,5 bash /home/oracle/export/export_base

Rien ne se passe !

Quand je vais dans /var/log/messages, à 11h45, j'ai :
Dec 9 11:45:00 nom_serveur /USR/SBIN/CRON[24264]: (oracle) CMD (bash /home/oracle/export/export_base)

Pour l'instant j'ai fait un chmod 777 sur le fichier /home/oracle/export/export_base

Quelqu'un pourrait-il me dire d'où provient l'erreur ?

Merci.

Audrey

12 réponses

dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
9 déc. 2008 à 13:14
hello
le job dans crontab n'a pas l'envronnement du login, mettre au début du script
source ~/.profile
0
J'ai rajouté en première ligne de mon script :
source ~/.profile

Ca n'a hélas rien changé.

L'utilisateur qui doit lancer le script est l'utilisateur oracle.
J'avais donc fait un crontab -e depuis l'utilisateur oracle (ce qui est la même chose que faire sous root
crontab -u oracle -e,
je l'ai testé en réel).

Je dois bien écrire source ~/.profile tel quel dans mon script ?

Pour info, voici mon script :

source ~/.profile
a=`date "+%d%m%y"`
exp alerte/alerte file=export_base_$a.dmp owner=ALERTE

Merci en tous cas de vous pencher sur mon pb.

Audrey
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
9 déc. 2008 à 14:16
que fait cette ligne ?

exp alerte/alerte file=export_base_$a.dmp owner=ALERTE
0
C'est elle qui réalise un export de la base oracle sous forme de fichier.dmp

Le nom du fichier créé par cette ligne de commande est export_base_date_du_jour.dmp

Je me demandais en revanche à quel endroit allait être déposé ce fichier.
J'ai supposé que ce serait dans le répertoire où s'exécute le script mais je n'en suis pas sûre...

Audrey
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
9 déc. 2008 à 14:37
ca doit être dans le home directory de l 'utilisateur oracle
voir se qui se passe
45 11 * * 1,2,3,4,5 bash /home/oracle/export/export_base >> log 2>&1
0
J'ai modifié le crontab comme spécifié.

Sous /home/oracle, j'ai bien un fichier log2 mais il est vide...
J'ai ajouté dans mon script un
echo toto > toto.txt
Et le fichier toto.txt apparaît bien dans /home/oracle
Ca doit donc être la ligne d'export qui ne fonctionne pas quand elle est exécutée depuis crontab, il doit lui manquer un paramètre...

Audrey
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
9 déc. 2008 à 14:53
certainement des variables d'environnement pour Oracle
mettre
set
dans le script et comparer avec un set dans un login
0
Je ne comprends pas ton dernier message.
Où dois-je mettre set exactement ?

Audrey
0

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

Posez votre question
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
9 déc. 2008 à 15:01
dans le script, ca va capturer l'environnement dans le fichier log
0
Voici le fichier log2 :

BASH=/bin/bash
BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="i586-suse-li
nux")
BASH_VERSION='2.05b.0(1)-release'
DIRSTACK=()
EUID=59
GROUPS=()
HOME=/home/oracle
HOSTNAME=titux
HOSTTYPE=i586
IFS=$' \t\n'
LOGNAME=oracle
MACHTYPE=i586-suse-linux
OPTERR=1
OPTIND=1
ORACLE_HOME=/home/oracle/oracle-9.2.0.4
ORACLE_SID=titan2
OSTYPE=linux
PATH=/usr/bin:/bin
PPID=24931
PS4='+ '
PWD=/home/oracle
SHELL=/bin/bash
SHELLOPTS=braceexpand:hashall:interactive-comments
SHLVL=2
TERM=dumb
UID=59
_=bash

Audrey
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
9 déc. 2008 à 15:13
est ce que ca correspond à un set après un login ou le script fonctionne ?
0
A peu près...

Il y a des infos en plus quand je fais set sur un login qui fonctionne :

BASH=/bin/bash
BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="i586-suse-li
nux")
BASH_VERSION='2.05b.0(1)-release'
COLORTERM=1
COLUMNS=80
CPU=i686
DIRSTACK=()
EUID=59
GNOMEDIR=/opt/gnome
GNOME_PATH=:/opt/gnome:/usr
GROUPS=()
HISTCONTROL=ignoredups
HISTFILE=/home/oracle/.bash_history
HISTFILESIZE=500
HISTSIZE=500
HOME=/home/oracle
HOST=titux
HOSTFILE=
HOSTNAME=titux
HOSTTYPE=i386
IFS=$' \t\n'
INFODIR=/usr/local/info:/usr/share/info:/usr/info
INFOPATH=/usr/local/info:/usr/share/info:/usr/info
INPUTRC=/etc/inputrc
JAVA_BINDIR=/usr/lib/java/bin
JAVA_HOME=/usr/lib/java
JAVA_ROOT=/usr/lib/java
JDK_HOME=/usr/lib/java
JRE_HOME=/usr/lib/java/jre
LC_CTYPE=fr_FR@euro
LD_ASSUME_KERNEL=2.2.5
LESS='-M -I'
LESSCLOSE='lessclose.sh %s %s'
LESSKEY=/etc/lesskey.bin
LESSOPEN='lessopen.sh %s'
LESS_ADVANCED_PREPROCESSOR=no
LINES=24
LOGNAME=oracle
LS_COLORS=
LS_OPTIONS='-N --color=none -T 0'
MACHTYPE=i686-suse-linux
MAIL=/var/mail/root
MAILCHECK=60
MANPATH=/usr/share/man:/usr/local/man:/usr/X11R6/man:/opt/gnome/man
MINICOM='-c on'
NNTPSERVER=news
OLDPWD=/home/oracle/export
OPTERR=1
OPTIND=1
ORACLE_BASE=/home/oracle
ORACLE_HOME=/home/oracle/oracle-9.2.0.4
ORACLE_SID=titan2
OSTYPE=linux
PAGER=less
PATH=/home/oracle/oracle-9.2.0.4/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin
PIPESTATUS=([0]="0" [1]="0")
PPID=24769
PRINTER=lp
PROFILEREAD=true
PS1='\u@\h:\w> '
PS2='> '
PS4='+ '
PWD=/home/oracle
QTDIR=/usr/lib/qt3
RC_LANG=fr_FR@euro
RC_LC_COLLATE=POSIX
SDK_HOME=/usr/lib/java
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:interactive-comments:monitor:priv
ileged
SHLVL=8
SSH_CLIENT='::ffff:172.16.2.120 1171 22'
SSH_TTY=/dev/pts/0
TERM=vt220
TEXINPUTS=:/root/.TeX:/usr/share/doc/.TeX:/usr/doc/.TeX
UID=59
USER=oracle
WINDOWMANAGER=/usr/X11R6/bin/kde
XKEYSYMDB=/usr/X11R6/lib/X11/XKeysymDB
XNLSPATH=/usr/X11R6/lib/X11/nls
...

Audrey
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
9 déc. 2008 à 15:35
grosses différences
changer dans le script le source ~/.profile par:
source ~/.bashrc
0
Ca fonctionne !!!

Peux-tu m'expliquer comment tu as trouvé qu'il fallait ajouter source ~/.bashrc ?
Peux-tu m'expliquer comment fonctionne cette commande ?

Merci.

Audrey
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
9 déc. 2008 à 16:16
.profile est commun à plusieurs shells, le .bashrc est plus spécifique à bash
des différences dans l'environnement entre login et cron est souvent source de problèmes, ça marche dans un login mais pas dans cron. le PATH après le source (post 11) est visiblement trop limité
0
Encore merci.

Audrey
0
J'ai exactement le même problème sur un autre serveur mais cette fois, la ligne :
source ~/.bashrc
ne fonctionne pas...

Audrey
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
12 déc. 2008 à 15:05
même utilisateur ?
même shell ?
en interractif ça fonctionne ?
0
L'utilisateur est toujours l'utilisateur oracle.
Je ne suis plus sur le même serveur.
Sur ce serveur, si je veux que la commande d'export fonctionne en ligne de commande je dois faire un :
su - oracle
(sur l'autre serveur, un "su oracle" sans le tiret suffisait).

Si je fais un set en ligne de commande avec l'utilisateur oracle, j'ai :
ACLOCAL_FLAGS='-I /opt/gnome/share/aclocal'
AGENT_HOME=/opt/oracle/product/10.2/agent
AIO_MAX_SIZE=262144
BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="3" [1]="1" [2]="17" [3]="1" [4]="release" [5]="x86_64-suse-
inux")
BASH_VERSION='3.1.17(1)-release'
CLASSPATH=/home/base_oracle/10g.2/JRE:/home/base_oracle/10g.2/jlib:/home/base_o
acle/10g.2/rdbms/jlib:/home/base_oracle/10g.2/network/jlib
COLORTERM=1
COLUMNS=80
CONSOLE_MAGIC='(K'
CPU=x86_64
CSHEDIT=emacs
CVS_RSH=ssh
DIRSTACK=()
ENV=/etc/bash.bashrc
EUID=102
FILE_MAX_KERNEL=131072
FILE_MAX_SHELL=65536
FROM_HEADER=
GNOME2_PATH=/usr/local:/opt/gnome:/usr
GROFF_NO_SGR=yes
GROUPS=()
GTK_PATH=/usr/local/lib/gtk-2.0:/opt/gnome/lib/gtk-2.0:/usr/lib/gtk-2.0
GTK_PATH64=/usr/local/lib64/gtk-2.0:/opt/gnome/lib64/gtk-2.0:/usr/lib64/gtk-2.0
G_BROKEN_FILENAMES=1
G_FILENAME_ENCODING=@locale,UTF-8,ISO-8859-15,CP1252
HISTCONTROL=ignoreboth
HISTFILE=/opt/oracle/oracle/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
HOME=/opt/oracle/oracle
HOST=titux2
HOSTFILE=
HOSTNAME=titux2
HOSTTYPE=x86_64
IFS=$' \t\n'
INFODIR=/usr/local/info:/usr/share/info:/usr/info
INFOPATH=/usr/local/info:/usr/share/info:/usr/info:/opt/gnome/share/info
INPUTRC=/etc/inputrc
INSTALL_DESKTOP_EXTENSIONS=yes
IP_LOCAL_PORT_RANGE='1024 65000'
LANG=fr_FR.UTF-8
LD_LIBRARY_PATH=/home/base_oracle/10g.2/lib:/home/base_oracle/10g.2/ctx/lib
LESS='-M -I'
LESSCLOSE='lessclose.sh %s %s'
LESSKEY=/etc/lesskey.bin
LESSOPEN='lessopen.sh %s'
LESS_ADVANCED_PREPROCESSOR=no
LINES=24
LOGNAME=oracle
LS_COLORS=
LS_OPTIONS='-N --color=none -T 0'
MACHTYPE=x86_64-suse-linux
MAIL=/var/spool/mail/oracle
MAILCHECK=60
MANPATH=/usr/local/man:/usr/share/man:/usr/X11R6/man:/opt/gnome/share/man
MAX_CORE_FILE_SIZE_SHELL=unlimited
...

Audrey
0
En fait, ce n'est pas tout à fait la même chose car cette fois, dans /var/log/messages, je ne vois pas le script se lancer...

Audrey
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
12 déc. 2008 à 16:05
alors vérifier le cron
0
J'ai eu un message dans /var/spool/mail :

/opt/oracle/oracle/.bashrc: No such file or directory...


Audrey
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
12 déc. 2008 à 16:09
ce n'est donc pas le même /opt/oracle/oracle que le cas précédent, faire un login oracle et ls -a
0
j'obteins ceci :

. export111208.dmp
.. export.dmp
.bash_history export_titux
charge_auto_.log expVoie020708.dmp
charge_auto_ndt.log expVoie151008.dmp
charge_auto_ndt.log.001 expVoie300408.dmp
charge_auto_ndt.log.002 expVoie.dmp
charge_auto_.sql import
copie_table_import.sql l
crontab lance_maj
exp040708.dmp lance_test
exp051208.dmp .lesshst
exp110408.dmp Mail
exp220108.dmp maj_copy.sql
exp240108.dmp result_test_reseau
exp250108.dmp sauve
expdat.dmp test_reseau
exp_maj.dmp trace
exp_maj.par .viminfo
exp_oracle_erreur.log
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
12 déc. 2008 à 16:15
copier le .bashrc de l'autre système
0