[résolu]Cron plusieurs taches

Bonjour,
Pi4 B+
j’ai une tache cron tous les jours à 8h30 qui fonctionne depuis pas mal de temps
je veux rajouter deux nouvelles taches
une à 6h l’autre à 16h
par crontab-e j’ai mis:
30 08 * * * sudo php /home/pi/tache1.php
00 06 * * * sudo php /home/pi/tache2.php 6
00 16 * * * sudo php /home/pi/tache3.php 16
j’ai rebooté le Pi
seule la tache1.php s’execute
les 2 et 3 non
Les droits des fichiers sont identiques 774
depuis un terminal en ligne de commande en lançant sudo php /home/pi/tache2.php 6 ça fonctionne
idem pour la 3

Dans journactl je vois bien passer la tache 1, pas la 2

Dois-t-on les mettre dans l’ordre de l’heure ?
Une commande a faire pour prise en compte nouveau crontab ? le reboot ne suffit pas ?

Alain

Bonjour,

Non il n’est pas indispensable de mettre les tâches dans l’ordre horaire, c’est juste préférable pour le confort de lecture utilisateur.

  • Une crontab est effective en sortie de la commande crontab -e inutile de rebooter.
    N.B.: En cas d’erreur de format sur une ligne de crontab un message d’erreur est spécifié en sortie de commande.

  • Pour voir les tâches actives passer la commande
    $ crontab -l

  • Pour visualiser les tâches crontab lancées aujourd’hui
    $ sudo journalctl -u cron -S today

  • Pour visualiser les tâches crontab lancées hier
    $ sudo journalctl -u cron -S yesterday

  • Il est souhaitable de créer une log d’exécution de chaque tâche
    Exemple:
    30 08 * * * sudo php /home/pi/tache1.php > /home/pi/tache1.log 2>&1

  • Il est déconseillé d’utiliser la commande sudo. Si cette commande doit être impérativement lancée par compte administrateur root. Dans ce cas, je conseille de configurer cette commande dans la crontab de l’utilisateur root.

  • La crontab est lancée dans un shell et un environnement restreint (/bin/sh).
    Pour cette raison, dans votre cas, il est possible que les options 6 et 16 ne soient pas prises en compte.

  • Il est recommandé d’inscrire le chemin complet des exécutables
    /usr/bin/php

Enfin personnellement, je crée systématiquement un script pour chaque ligne de crontab
Par exemple :

  • Créer les répertoires bin et log
    $ mkdir $HOME/bin $HOME/log

  • Déplacer les scripts php dans bin
    $ mv $HOME/*.php $HOME/bin/

  • Créer le contenu de /home/pi/bin/tache1.bash

#!/bin/bash 
# Script lancé en crontab 
# 0 0 * * * /home/pi/bin/tache1.bash > /home/pi/log/tache1.log 2>&1

PROG=${0##*/}
LOG=/home/pi/log/$PROG.log
echo "--- `date`  --- DEBUT $PROG"  > $LOG
/usr/bin/sudo /usr/bin/php /home/pi/bin/tache1.php >> $LOG 
echo "--- `date` --- FIN $PROG"  >> $LOG
  • Rendre exécutable le script
    chmod 744 /home/pi/bin/tache1.bash

  • Exécuter le script à la main (en ligne de commande) et vérifier l’exécution et le contenu de la log.

  • Modifier la crontab
$ crontab -e
0 0 * * * /home/pi/bin/tache1.bash > /home/pi/log/tache1.log 2>&1

:warning: Toutes ses commandes ont été saisies de mémoire, je n’ai pas un pi sous la main pour les valider, il est possible qu’il y ait quelques adaptations à faire.

A+

Merci pour cette réponse super rapide et complète, je teste tout ça
Entête des scripts php j’avais mis
#!/usr/bin/php

En un premier temps je fais un script php par tache
Alain

Bonjour,
Grace à l’enr dans les logs je viens de me rendre compte que j’avais une faute de frappe dans le nom du fichier dans crontab.
j’ai rectifié, ça devrait fonctionner.
merci d’avoir pris le temps de m’aider.
Alain