Question : Quelle est la raison pour laquelle mon travail cron n'est pas exécuté lorsque j'utilise le pourcentage '%' dans mon travail cron. Comment résoudre ce problème ?
Réponse : '%' est le nouveau spécificateur de ligne dans la commande cron. Ainsi, lorsque vous utilisez %, il est interprété comme une nouvelle ligne dans la tâche cron. Voyons comment résoudre ce problème et utiliser % dans la tâche cron.
Définition du problème avec l'exemple :'%' dans la tâche cron (tâche cron non réussie)
* * * * * date +"%d" >> /tmp/non-working-ex1.txt
A des fins de test, tous les champs de l'exemple de crontab ci-dessus contiennent *. Cela exécutera la tâche cron spécifiée toutes les minutes.
Pour comprendre la configuration crontab, lisez notre article précédent qui contient 15 exemples de tâches cron impressionnants.
Si vous avez accès à syslog, vous verrez une ligne similaire à la suivante.
Jun 20 08:31:01 ubuntu-laptop /USR/SBIN/CRON[6752]: (ramesh) CMD (date +")
Dans l'entrée syslog de cet exemple spécifique, la commande s'affiche uniquement sous la forme :(date +") . Idéalement, cela devrait être affiché comme :date +"%d" . Cela indique que le pourcentage est analysé comme un symbole spécial dans le cron. c'est-à-dire qu'il termine la commande exactement au %age.
Solution avec exemple :contourner le problème en utilisant « % » dans la tâche cron.
Vous pouvez résoudre ce problème en utilisant les deux méthodes suivantes. Cette solution devrait résoudre le problème sur toutes les versions d'Unix/Linux, y compris Ubuntu, Debian, Fedora, RedHat, CentOS, AIX etc.,
Méthode 1 :échapper le pourcentage avec \
Vous pouvez échapper le pourcentage avec une barre oblique inverse et le faire fonctionner comme un travail normal.
$ crontab -l * * * * * date +"\%M" > /tmp/working-ex1.txt
Remarque : Ce ‘\’ ne sera pas vu par la commande date, ou toute autre commande que vous invoquez. Le \ sert à échapper au comportement spécial du pourcentage dans cron.
Méthode 2 :Utiliser un script shell
Créez un script shell avec la commande pourcentage et planifiez le script shell en tant que tâche cron.
$ cat /bin/date.sh date +"%d" $ crontab -l * * * * * /bin/sh /bin/date.sh > /tmp/working-ex2.txt
À la minute suivante, vous aurez la sortie de la commande exécutée dans le /tmp/working-ex2.txt
Vous aurez maintenant la ligne suivante qui a exécuté la commande avec succès dans le syslog.
Jun 20 08:36:01 ubuntu-laptop /USR/SBIN/CRON[6962]: (ramesh) CMD (/bin/sh /bin/date.sh >> /tmp/working-ex2.txt)
Remarque : N'oubliez pas de supprimer ces entrées cron de test car elles seront exécutées toutes les minutes.
Si vous rencontrez un autre problème avec la crontab, faites-le nous savoir dans la section des commentaires.