Pb crontab

Résolu
audrey -  
dubcek Messages postés 18627 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

12 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    le job dans crontab n'a pas l'envronnement du login, mettre au début du script
    source ~/.profile
    0
    1. audrey
       
      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
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    que fait cette ligne ?

    exp alerte/alerte file=export_base_$a.dmp owner=ALERTE
    0
    1. audrey
       
      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
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
    1. audrey
       
      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
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    certainement des variables d'environnement pour Oracle
    mettre
    set
    dans le script et comparer avec un set dans un login
    0
    1. audrey
       
      Je ne comprends pas ton dernier message.
      Où dois-je mettre set exactement ?

      Audrey
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    dans le script, ca va capturer l'environnement dans le fichier log
    0
    1. audrey
       
      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
  7. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    est ce que ca correspond à un set après un login ou le script fonctionne ?
    0
    1. audrey
       
      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
  8. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    grosses différences
    changer dans le script le source ~/.profile par:
    source ~/.bashrc
    0
    1. audrey
       
      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
  9. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    .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
    1. audrey
       
      Encore merci.

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

      Audrey
      0
  10. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    même utilisateur ?
    même shell ?
    en interractif ça fonctionne ?
    0
    1. audrey
       
      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
    2. audrey
       
      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
  11. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    alors vérifier le cron
    0
    1. audrey
       
      J'ai eu un message dans /var/spool/mail :

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


      Audrey
      0
  12. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
    1. audrey
       
      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
  13. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    copier le .bashrc de l'autre système
    0