Pb crontab
Résolu
audrey
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
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
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
hello
le job dans crontab n'a pas l'envronnement du login, mettre au début du script
source ~/.profile
le job dans crontab n'a pas l'envronnement du login, mettre au début du script
source ~/.profile
que fait cette ligne ?
exp alerte/alerte file=export_base_$a.dmp owner=ALERTE
exp alerte/alerte file=export_base_$a.dmp owner=ALERTE
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
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
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
voir se qui se passe
45 11 * * 1,2,3,4,5 bash /home/oracle/export/export_base >> log 2>&1
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
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
certainement des variables d'environnement pour Oracle
mettre
set
dans le script et comparer avec un set dans un login
mettre
set
dans le script et comparer avec un set dans un login
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
dans le script, ca va capturer l'environnement dans le fichier log
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
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
est ce que ca correspond à un set après un login ou le script fonctionne ?
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
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
.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é
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é
même utilisateur ?
même shell ?
en interractif ça fonctionne ?
même shell ?
en interractif ça fonctionne ?
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
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
ce n'est donc pas le même /opt/oracle/oracle que le cas précédent, faire un login oracle et ls -a
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
. 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
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