crontab - execution de script différente que manuel

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous,

Ces derniers jours, je me suis penché sur l’automatisation de la vérification de mes sauvegardes à savoir

  1. On s’assure que le fichier est bien présent
  2. On le décompresse et on s’assure que la décompression n’a posé problème

Tout ceci fonctionne est réaliser via un script python et fonctionne bien lorsque je le lance manuellement

En revanche, avec crontab (je voudrais que le check soit fait toutes les semaines au moins), le script ne semble pas aller au bout. Pour comprendre, j’ai essayé d’activer les logs de crontab en m’appuyant sur cette doc
Cependant le fichier /var/log/cron.log ne contient pas beaucoup d’information si ce n’est que la tâche a démarrée

J’ai aussi pensé à ajouter des "logs" dans mon script

def check_archives_integrity(files_list):
    """
    try extract all files from files_list
    
    :param list files_list: list of archive to check
    :return: list of archive that failed to extract
    """
    unzip_errors = []
    for root, file_name in files_list:
        file_path = os.path.join(root, file_name)
        with open(r"/home/DonK/log.txt", "a") as fs:
            fs.write("\n{}".format(file_path))
        
            try:
                temp_dir = os.path.join(root, "temp")
                if not os.path.isdir(temp_dir):
                    os.mkdir(temp_dir)
                Archive(file_path).extractall(temp_dir)
            except PatoolError as er:
                fs.write("\n{}".format(er))
                unzip_errors.append(file_path)
            fs.write("\nend")

D’après le log, le code semble bloqué au premier fichier de la liste (il n’y a qu’un nom de fichier dedans)
Le répertoire temp est bien créé mais je ne vois jamais le fichier décompressé dedans

Manuellement , tout se passe, le log se rempli normalement et je vois bien les fichiers décompressés au fur et à mesure

Une idée de la cause ou de comment comprendre ?

+0 -0

Alors déjà sache que les cronjob définis avec la commande crontab sont lancés par défaut avec ton compte utilisateur, tandis qu’avec la commande sudo crontab ils sont lancés avec le compte root. Ensuite, étant donné que tu le répertoire temp est bien créé, le soucis semble venir de la ligne Archive(file_path).extractall(temp_dir). Si j’étais toi, j’irais creuser de ce côté là !

+0 -0

Alors déjà sache que les cronjob définis avec la commande crontab sont lancés par défaut avec ton compte utilisateur, tandis qu’avec la commande sudo crontab ils sont lancés avec le compte root.

Situphen

Je travail avec le compte root donc pas de différences pour moi

Ensuite, étant donné que tu le répertoire temp est bien créé, le soucis semble venir de la ligne Archive(file_path).extractall(temp_dir). Si j’étais toi, j’irais creuser de ce côté là !

Situphen

Oui mais le try/except devrait donner l’erreur si elle se produit non?

+0 -0

le try/except devrait donner l’erreur si elle se produit non?

L’erreur peut ne pas être une PatoolError, auquel cas le script crashe de la façon que tu observes.

Pour vérifier cela, je vois deux possibilités faciles à mettre en place :

  • modifier temporairement le script pour prendre en charge toutes les exceptions et les loguer dans ton fichier
try:
    ...
except Exception as er:
    ...
  • configurer ton cron pour envoyer un mail quand un job écrit sur stdout/stderr (notamment le message d’erreur, dans ton cas)

Finalement, tu m’as mis sur la piste puisque effectivement c’est bien la ligne Archive(file_path).extractall(temp_dir) qui posait problème
Après avoir modifier mon try/except pour mettre Exception au lieu de PatoolError, j’ai eu des log indiquant :

patool not found! Please install patool!

Je me suis alors souvenu que crontabavait besoin de redéclarer le PATH comme ceci (j’ai pris celui de la page citée dans mon 1er message)

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

et le tour est joué :magicien:

EDIT : merci @jmiven , comme tu le vois c’est bien une erreur non PatoolError qui posait problème

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte