1 votes

Cron n'écrit pas dans le journal instantanément sur Ubuntu

J'exécute un script Python par l'intermédiaire de cron . Le script contient de nombreuses instructions print dès son début (la première ligne est un print). Cependant, même si le script s'exécute, le fichier journal est créé mais reste vide.

Voici ma crontab :

00 14 * * * python DE.py >> DElog.log 2>&1

Quelqu'un a-t-il une idée de la raison ?

1voto

snowdude Points 2790

La patience est une vertu.

Pour commencer, le fichier journal est créé en premier, avant même que le script ne commence à s'exécuter et à générer des sorties.

Deuxièmement, sous Linux, lorsque la sortie standard est redirigée vers quelque chose d'autre qu'un TTY (une fenêtre de terminal), la sortie sera entièrement mise en tampon par défaut, plutôt que d'être mise en tampon par ligne.

Parce que vous redirigez aussi l'erreur standard vers stdout (avec 2>&1 ) aucune sortie ne sera écrite sur le disque jusqu'à ce que :
- soit votre script se termine
ou
- la sortie dépasse la taille du tampon par défaut (de 4k ?).

Vous pouvez ajuster la mise en mémoire tampon avec stdbuff et rendre les modes d'erreur et de sortie non tamponnés :

stdbuf -o0 -e0 python DE.py >> DElog.log 2>&1

0voto

Patrick Mevzek Points 7707

Le fichier journal existe et est vide car il est ouvert par le Shell, avant même l'exécution du Shell.

Voir :

    $ rm log
rm: log: No such file or directory
    $ thatdoesnotexist > log
-bash: thatdoesnotexist: command not found
    $ ls log
log

Donc votre script ne s'exécute probablement pas du tout.

Premièrement, pour crontab, il faut toujours spécifier le chemin complet. Ainsi, au lieu de

python DE.py

mettez quelque chose comme (ajustez le chemin bien sûr)

python /usr/local/bin/DE.py

Même chose pour le fichier journal : spécifiez son chemin complet.

Vous n'avez pas précisé de quelle crontab il s'agit, quel utilisateur ? Comment avez-vous entré ces lignes ? Parce que vous devrez vous assurer que l'utilisateur sous lequel cette commande sera exécutée dispose de droits suffisants. Il aura besoin d'un accès en lecture pour lire le fichier Python et l'exécuter, puis d'un accès en écriture sur le chemin du fichier journal pour pouvoir y écrire.

Ce sont les premières étapes que vous devez régler.

Aussi, conseil de passage : avec le bash Shell,

 >> DElog.log 2>&1

peut être simplifié en

&>> DElog.log

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X