Crontab script erreur bizarre

Bonjour, je rencontre un problème avec cron.

Voila j’utilise la messagerie zimbra et pour « backup » les comptes j’utilise la commande :

zmmailbox -z -m adresse@mail.fr getRestUrl -u https://liendemonserveur "//?fmt=zip" > /lieu/de/sauvegarde/compte.zip

ceci a pour but de créer un zip avec toutes les infos du compte.

Alors j’ai créer un script mail.sh comme suivant:


#!/bin/bash

TODAY=$(date +%F)

zmmailbox -z -m $1 getRestUrl -u https://liendemonserveur "//?fmt=zip" > /opt/zimbra/backupMails/$1/compte$TODAY.zip

Du coup, je me log avec le compte zimbra, et execute "crontab -e"
10 1 * * * /opt/zimbra/backupMails/script/mail.sh adresse@mail.fr

En exécutant le script a la main : ./mail.sh adresse@mail.fr
le fichier existe et fait une 100mo

MAIS en l’exécutant avec cron, le fichier pèse 0 octets.

Pouvez vous m’aider car je ne trouve pas le problème.

Bonjour et bienvenue dans la communauté,

Le problème que tu décris ressemble à un souci avec l’environnement d’exécution de la tâche.
Essaie de rajouter la ligne suivante dans ton script :

env > /opt/zimbra/backupMails/$1/env_$(date +%s)

puis tu réessaies de le lancer dans les deux situations (à la main et par la tâche cron) et tu compares les deux environnements pour voir ce qu’il manque entre l’un et l’autre.

Que la Force soit avec toi !

Merci de ta réponse rapide ça fait plaisir :slight_smile:

Je vais essayer ceci et je vous tien au courant!

Mais ce qui est étrange c’est que a la mano ça fonctionne en étant log sur zimbra, car root ne reconnais pas la commande zmmailbox …

J’ajoute que le cron est logiquement lancé a partir de l’utilisateur zimbra.

  • EXECUTION AVEC L’UTILISATEUR ZIMBRA:
    A la main cela fonctionne et env_date me donne ceci :
LC_ALL=C
LANG=C
TZ=Europe/Paris
HISTTIMEFORMAT=%y%m%d %T
OLDPWD=/opt/zimbra/backupMails/jf@mail[.]fr
USERNAME=zimbra
JAVA_HOME=/opt/zimbra/common/lib/jvm/java
S_COLORS=auto
USER=zimbra
PWD=/opt/zimbra/backupMails/script
HOME=/opt/zimbra
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
MAIL=/var/mail/zimbra
TERM=xterm
SHELL=/bin/bash
PERL5LIB=/opt/zimbra/common/lib/perl5/x86_64-linux-gnu-thread-multi:/opt/zimbra/common/lib/perl5
SNMPCONFPATH=/opt/zimbra/conf
SHLVL=2
MANPATH=/opt/zimbra/common/share/man:
JYTHONPATH=/opt/zimbra/common/lib/jylibs
LOGNAME=zimbra
PATH=/opt/zimbra/bin:/opt/zimbra/common/lib/jvm/java/bin:/opt/zimbra/common/bin:/opt/zimbra/common/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
PERLLIB=/opt/zimbra/common/lib/perl5/x86_64-linux-gnu-thread-multi:/opt/zimbra/common/lib/perl5
_=/usr/bin/env

Et le fichier zip n’est pas VIDE ^^ :

zimbra@mail:~/backupMails/jf@mail[.]fr$ ls -all
total 8128
drwxrwxrwx 1 zimbra zimbra      68 Oct  8 14:23 .
drwxrwxrwx 1 zimbra zimbra     104 Oct  8 14:23 ..
-rwxrwxrwx 1 zimbra zimbra **8317264** Oct  8 14:23 compte2021-10-08.zip
-rwxrwxrwx 1 zimbra zimbra     907 Oct  8 14:23 env_1633695824
  • EXECUTION AVEC CRON:

Avec zimbra je lance un crontab -e, et j’appuis sur 2 fois entrée

zimbra@mail:~$ crontab -e
touch: cannot touch '/opt/zimbra/.selected_editor': Permission denied
Unable to create directory /opt/zimbra/.local/share/nano/: No such file or directory
It is required for saving/loading search history or cursor positions.

Press Enter to continue

Voici la commande cron que j’exécute sous zimbra

45 14 * * * /opt/zimbra/backupMails/script/mail.sh jf@mail[.]fr

Avec cron env_date me donne ceci :

LANG=fr_FR.utf8,LC_ALL=fr_FR.utf8
TZ=Europe/Paris
PWD=/opt/zimbra
HOME=/opt/zimbra
SHELL=/bin/bash
SHLVL=2
LOGNAME=zimbra
PATH=/usr/bin:/bin
_=/usr/bin/env

Et le fichier zip est VIDE … :

zimbra@mail:~/backupMails/jf@mail[.]fr$ ls -all
total 4
drwxrwxrwx 1 zimbra zimbra  68 Oct  8 14:45 .
drwxrwxrwx 1 zimbra zimbra 104 Oct  8 14:23 ..
-rwxrwxrwx 1 zimbra zimbra   **0** Oct  8 14:45 compte2021-10-08.zip
-rwxrwxrwx 1 zimbra zimbra 156 Oct  8 14:45 env_1633697281

J’avoue être perdu je ne comprend pas cette force obscure aha. :sweat_smile:

PS: j’ai déjà essayé aussi avec le crontab de root et cela reviens au meme…

Bonjour,

Dans ton script indique l’emplacement complet du(es) exécutable(s), ou précise la variable d’environnement PATH dans ton crontab, sinon la commande zmailbox ne sera pas trouvée.

Donc j’ai fais ceci pour voir le path de zimbra:

zimbra@mail:~/backupMails/script$ cat test.sh
export PATH=$PATH:$HOME/bin
echo $PATH

./test.sh, retourne :

zimbra@mail:~/backupMails/script$ ./test.sh
/opt/zimbra/bin:/opt/zimbra/common/lib/jvm/java/bin:/opt/zimbra/common/bin:/opt/zimbra/common/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/zimbra/bin

Vous voulais que je l’ajoute a mon script d’origine ?

MERCIIII, ereka, cela fonctionne ^^

Euh oui cela doit fonctionner comme cela aussi…
Mais ce que je disais c’était de mettre :

PATH=******

dans le fichier crontab. (lire man 5 crontab)

C’est un problème classique. La tâche cron est lancée par un utilisateur qui n’est pas connecté (non-login, non-interactive shell). Les fichiers qui définissent certaines variables d’environnement comme PATH ne sont donc pas sourcés. C’est poourquoi les commandes échouent lorsque elles ne sont pâs utilisées avec leur emplacement complet ou que PATH n’est pas définie dans le crontab.