# Problème de tâche cron qui ne s'exécute pas

**URL:** <https://www.debian-fr.org/t/probleme-de-tache-cron-qui-ne-sexecute-pas/80019>\
**Category:** Programmation\
**Created:** [Août 28, 2019, 9:35 UTC](https://www.debian-fr.org/t/probleme-de-tache-cron-qui-ne-sexecute-pas/80019 "2019-08-28T21:35:28Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![Runner85](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/858c86/32.png) [@Runner85](https://www.debian-fr.org/u/Runner85)\
**Post date:** [Août 28, 2019, 9:35 UTC](https://www.debian-fr.org/t/probleme-de-tache-cron-qui-ne-sexecute-pas/80019/1 "2019-08-28T21:35:28Z")

</div>

Bonjour c’est encore moi décidément ce serveur m’aura donné du fil à retorde.  
Je souhaite mettre en place un script cron qui me récupère la base de donnée d’un poste me l’injecte dans ma base de données de mon application puis me lance un script de calcul de stock.

Ce script est un script PHP qui fonctionne impeccablement bien s’il est lancé manuellement.

Pour cela j’édite mon fichier cron à laide de `crontab -e` et j’y met le contenu suivant

```
25 23 * * 1-5 /var/www/html/sygecarV3/exploitation/transfert/execution.php >> /home/log_cron_bascule.log

```

Mon cron me crée bien à l’heure indiqué mon fichier log\_cron\_bascule.log mais celui-ci est vide et mon script php ne s’est pas exécuté.

Dans le script tous les includes sont fait avec des chemins absolus du style

```
/var/www/html/sygecarV3/exploitation/ventes/updateStock/stock.php

```

Merci par avance pour votre utile aide j’espère.

En tous cas votre forum est au top avec des personnes cool et réactive ça fait plaisir d’en trouver sur le net 😉

---

<div class="post-metadata">

**Author:** ![anon44391915](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/958977/32.png) [@anon44391915](https://www.debian-fr.org/u/anon44391915)\
**Post date:** [Août 28, 2019, 9:47 UTC](https://www.debian-fr.org/t/probleme-de-tache-cron-qui-ne-sexecute-pas/80019/2 "2019-08-28T21:47:21Z")

</div>

Salut

Il faut utiliser l’interpréteur PHP pour exécuter un script `.php`

J’ai repensé à un sujet qui l’évoque :

> [@PHP ou Python](https://www.debian-fr.org/t/php-ou-python/78974/10):
>
> PHP peut également fonctionner comme n’importe quel langage interprété de façon locale. [https://fr.wikipedia.org/wiki/PHP](https://fr.wikipedia.org/wiki/PHP) C’est tout ce que je voulais dire [scam](https://www.debian-fr.org/u/scam). Le terme « autonome » que j’ai employé n’est pas bien choisi.

> [@Runner85](#):
>
> Dans le script tous les includes sont fait avec des chemins absolus

Faire de même pour l’interpréteur `php` ; utiliser son chemin absolu.  
Surtout dans une entrée `cron`.

```plaintext
which php

```

---

<div class="post-metadata">

**Author:** ![Runner85](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/858c86/32.png) [@Runner85](https://www.debian-fr.org/u/Runner85)\
**Post date:** [Août 28, 2019, 9:48 UTC](https://www.debian-fr.org/t/probleme-de-tache-cron-qui-ne-sexecute-pas/80019/3 "2019-08-28T21:48:34Z")

</div>

J’ai trouvé il me manquait

```
/usr/bin/php5.6

```

avant le chemin vers mon script.  
Je ne ferme pas la discussion car j’ai d’autre script bash à mettre mais il ne semble pas fonctionner que dois-je mettre ?

---

<div class="post-metadata">

**Author:** ![anon44391915](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/958977/32.png) [@anon44391915](https://www.debian-fr.org/u/anon44391915)\
**Post date:** [Août 28, 2019, 9:55 UTC](https://www.debian-fr.org/t/probleme-de-tache-cron-qui-ne-sexecute-pas/80019/4 "2019-08-28T21:55:01Z")

</div>

> [@Runner85](#):
>
> ```auto
> /etc/bin/php5.6
> 
> ```

Il me semble particulier ton chemin vers l’interpréteur PHP 😉

> [@Runner85](#):
>
> j’ai d’autre script bash à mettre mais il ne semble pas fonctionner que dois-je mettre ?

Montrer ce qui ne marche pas d’abord.

Il faut faire attention avec des tâches cron qui sont mal écrites  
car des dommages ou un comportement imprévisible peuvent en résulter.

---

<div class="post-metadata">

**Author:** ![Runner85](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/858c86/32.png) [@Runner85](https://www.debian-fr.org/u/Runner85)\
**Post date:** [Août 28, 2019, 10:11 UTC](https://www.debian-fr.org/t/probleme-de-tache-cron-qui-ne-sexecute-pas/80019/5 "2019-08-28T22:11:44Z")

</div>

/usr et pas /etc la fatigue 😕

Celui-ci par exemple ne fonctionne pas

`08 00 * * 1-5 /var/www/html/sygecarV3/sql/script`

il s’agit d’un script contenant ceci.

```nohighlight
mysqldump -h localhost -u xxxxx -pxxxxxx --add-drop-database -B sygecarV3 > dump_sygecarV3.sql

```

---

<div class="post-metadata">

**Author:** ![anon44391915](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/958977/32.png) [@anon44391915](https://www.debian-fr.org/u/anon44391915)\
**Post date:** [Août 28, 2019, 10:40 UTC](https://www.debian-fr.org/t/probleme-de-tache-cron-qui-ne-sexecute-pas/80019/6 "2019-08-28T22:40:27Z")

</div>

> [@Runner85](#):
>
> ```plaintext
> 08 00 * * 1-5 /var/www/html/sygecarV3/sql/script
> 
> ```

```plaintext
08 00 * * 1-5 /bin/sh -c /var/www/html/sygecarV3/sql/script > /dev/null

```

`/var/www/html/sygecarV3/sql/script` doit être exécutable  
par l’user qui exécute la tâche `cron`.

> [@Runner85](#):
>
> ```plaintext
> mysqldump -h localhost -u xxxxx -pxxxxxx --add-drop-database -B sygecarV3 > dump_sygecarV3.sql
> 
> ```

```plaintext
#!/bin/sh
/chemin/vers/mysqldump -h localhost -u xxxxx -pxxxxxx --add-drop-database -B sygecarV3 > /chemin/vers/destination/dump_sygecarV3.sql

```

---

<div class="post-metadata">

**Author:** ![Runner85](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/858c86/32.png) [@Runner85](https://www.debian-fr.org/u/Runner85)\
**Post date:** [Août 28, 2019, 11:10 UTC](https://www.debian-fr.org/t/probleme-de-tache-cron-qui-ne-sexecute-pas/80019/7 "2019-08-28T23:10:41Z")

</div>

Yes ça fonction impeccable enfin dernière chose j’ai deux scripts en `bash` cette fois qui me permette avec rsync d’aller chercher les données de mon serveur 1 et de les sauvegarder sur le disque 1 du serveur 2 et le disque 2 du serveur 2.

Les deux script sont identiques il n’y a que le dossier qui change.  
Le premier fonctionne impeccable mais le deuxième ne se lance pas.

Ci-joint le `crontab -e`

```nohighlight
55 00 * * 1-5 /bin/sh -c /home/sdbbackup/script/script_sauvegarde_disque_1
57 00 * * 1-5 /bin/sh -c /home/sbdbackup/script/script_sauvegarde_backup

```

Le code du `script_sauvegarde_disque_1`

```nohighlight
#!/bin/bash -x
log="/home/log/sauvegarde_backup.log"
login="xxx"
host="192.xxx.xxx.xxx"
src="/home"
src_sygecar="/var/www/html"
dossier_sygecar="sygecarV3"
dest="/home/sauvegarde_sdbr"
statut="completed successfully"
cmddate="`date +[%d/%b/%Y:%H:%M:%S]`"
echo "$cmddate Backup SDBR started" > $log
tab=(
        "archives/"
        "dossier1/"
        "exploitation/"
        "dossier2/"
        "dossier3/"
        "prive/"
        "public/"
        "dossier4/"
)
fin=${#tab[*]}
fin=$(( $fin - 1 ))
for i in `seq 0 $fin`;
do
        cmddate="`date +[%d/%b/%Y:%H:%M:%S]`"
        echo -n $cmddate ${tab[$i]} >> $log
        rsync -P -v --update -r -e ssh $login@$host:$src/${tab[$i]} $dest/${tab[$i]}
        retour=$?
        if [[$retour == 0]]
                then
                        echo " Completed successfully" >> $log
        else
                echo " ERROR" >> $log
                statut="ERROR"
        fi
done

```

et le code du `script_sauvegarde_backup`

```nohighlight
#!/bin/bash -x
log="/home/log/sauvegarde_backup.log"
login="xxx"
host="192.xxx.xxx.xxx"
src="/home"
src_sygecar="/var/www/html"
dossier_sygecar="sygecarV3"
dest="/backup"
statut="completed successfully"
cmddate="`date +[%d/%b/%Y:%H:%M:%S]`"
echo "$cmddate Backup SDBR started" > $log
tab=(
        "archives/"
        "dossier1/"
        "exploitation/"
        "dossier2/"
        "dossier3/"
        "prive/"
        "public/"
        "dossier4/"
)
fin=${#tab[*]}
fin=$(( $fin - 1 ))
for i in `seq 0 $fin`;
do
        cmddate="`date +[%d/%b/%Y:%H:%M:%S]`"
        echo -n $cmddate ${tab[$i]} >> $log
        rsync -P -v --update -r -e ssh $login@$host:$src/${tab[$i]} $dest/${tab[$i]}
        retour=$?
        if [[$retour == 0]]
                then
                        echo " Completed successfully" >> $log
        else
                echo " ERROR" >> $log
                statut="ERROR"
        fi
done

```

Bien sur si lancé manuellement aucun problème de fonctionnement

---

<div class="post-metadata">

**Author:** ![anon44391915](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/958977/32.png) [@anon44391915](https://www.debian-fr.org/u/anon44391915)\
**Post date:** [Août 28, 2019, 11:17 UTC](https://www.debian-fr.org/t/probleme-de-tache-cron-qui-ne-sexecute-pas/80019/8 "2019-08-28T23:17:55Z")

</div>

> [@Runner85](#):
>
> ```auto
> /home/sdbbackup/script/script_sauvegarde_disque_1
> 
> ```

Demande plus de deux minutes pour se terminer ?

Ton `cron` suivant est à 00:57 ; deux minutes après.  
Et sans étudier les scripts, je pense qu’ils utilisent des ressources communes.  
Et tu invoques des scripts `bash` avec `/bin/sh -c`  
Je ne connais pas encore ce `-x` de `#!/bin/bash -x`  
🤔🤨

On va attendre les codeurs.  
Là, je vais t’induire en erreur et il est tard.

Je te recommande de finir les lignes de tes entrées `crontab` par : ` > /dev/null`  
Comme pour le script précédent.

Une tâche `cron` ne doit produire **aucune** sortie standard ;  
risque de dommages encourus autrement.  
Ou de comportement imprévisible.

---

<div class="post-metadata">

**Author:** ![Runner85](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/858c86/32.png) [@Runner85](https://www.debian-fr.org/u/Runner85)\
**Post date:** [Août 28, 2019, 11:40 UTC](https://www.debian-fr.org/t/probleme-de-tache-cron-qui-ne-sexecute-pas/80019/9 "2019-08-28T23:40:42Z")

</div>

Dans mon test oui il met mois de 2 minutes pour finir car j’ai déjà lancé les commandes manuellement donc il n’y a rien à ramener.

Oups oui j’ai changé dans le crontab par `/bin/bash`

Pour le `#!/bin/bash -x` j’ai un autre script qui fait la même chose sur un autre serveur et il fonctionne impeccablement une question à quoi sert le `-c` après `/bin/sh` ?

Merci

---

<div class="post-metadata">

**Author:** ![anon44391915](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/958977/32.png) [@anon44391915](https://www.debian-fr.org/u/anon44391915)\
**Post date:** [Août 28, 2019, 11:44 UTC](https://www.debian-fr.org/t/probleme-de-tache-cron-qui-ne-sexecute-pas/80019/10 "2019-08-28T23:44:26Z")

</div>

> [@Runner85](#):
>
> une question à quoi sert le `-c` après `/bin/sh` ?

Il donne à exécuter le script précisé après.

```plaintext
man sh

```

```plaintext
−c Read commands from the command_string operand.
Set the value of special parameter 0
(see Section 2.5.2, Special Parameters)
from the value of the command_name operand and the positional
parameters ($1, $2, and so on) in sequence from the remaining
argument operands.
No commands shall be read from the standard input.

```

---

<div class="post-metadata">

**Author:** ![anon44391915](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/958977/32.png) [@anon44391915](https://www.debian-fr.org/u/anon44391915)\
**Post date:** [Août 28, 2019, 11:45 UTC](https://www.debian-fr.org/t/probleme-de-tache-cron-qui-ne-sexecute-pas/80019/11 "2019-08-28T23:45:26Z")

</div>

> [@Runner85](#):
>
> Oups oui j’ai changé dans le crontab par `/bin/bash`

Il a une option lui aussi pour donner à exécuter un script en argument.  
C’est la même (`-c`)

man bash

---

<div class="post-metadata">

**Author:** ![Runner85](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/858c86/32.png) [@Runner85](https://www.debian-fr.org/u/Runner85)\
**Post date:** [Août 28, 2019, 11:49 UTC](https://www.debian-fr.org/t/probleme-de-tache-cron-qui-ne-sexecute-pas/80019/12 "2019-08-28T23:49:56Z")

</div>

Ok merci.

Bon je verrais demain pour trouver une solution dommage parce que j’avais plus qu’à ça pour terminer 😕

Merci beaucoup pour ton aide bien précieuse

---

<div class="post-metadata">

**Author:** ![anon44391915](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/958977/32.png) [@anon44391915](https://www.debian-fr.org/u/anon44391915)\
**Post date:** [Août 29, 2019, 2:30 UTC](https://www.debian-fr.org/t/probleme-de-tache-cron-qui-ne-sexecute-pas/80019/13 "2019-08-29T02:30:05Z")

</div>

> [@Runner85](#):
>
> Les deux script sont identiques il n’y a que le dossier qui change.  
> Le premier fonctionne impeccable mais le deuxième ne se lance pas.

> [@Runner85](#):
>
> Ci-joint le crontab -e
> 
> > 55 00 \* \* 1-5 /bin/sh -c /home/sdbbackup/script/script\_sauvegarde\_disque\_1  
> > 57 00 \* \* 1-5 /bin/sh -c /home/ **sbd** backup/script/script\_sauvegarde\_backup

Je te fais remarquer la coquille **sbd** backup  
Ce ne doit être que ça.

Il peut y avoir des éléments qui restent à différencier - ou peuvent l’être - entre les deux scripts.  
ie : le journal.

J’ai regardé pour le `#!/bin/bash -x`  
Et il me semble que cela n’ait aucun effet particulier d’utiliser `-x` dans ce contexte.

---

<div class="post-metadata">

**Author:** ![Runner85](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/858c86/32.png) [@Runner85](https://www.debian-fr.org/u/Runner85)\
**Post date:** [Août 29, 2019, 6:02 UTC](https://www.debian-fr.org/t/probleme-de-tache-cron-qui-ne-sexecute-pas/80019/14 "2019-08-29T06:02:01Z")

</div>

Tu es un génie 🤩🧐  
Effectivement c’était juste cette petite faute de frappe à la noix.

En même temps à y avoir passé 3 jours sur le serveur je ne voyais plus rien.

Un grand merci à toi et aux autres qui m’ont aidé sur ce forum durant ses 3 jours.

Nicolas
