J'ai planifié le travail suivant:
root@alexus:~# crontab -l | grep ^\@hourly
@hourly OUT=`/usr/lib/nagios/plugins/check_disk --include-type=ext4 --warning=10% --critical=5%` ; if [ $? != 0 ] ; then echo $OUT ; fi
root@alexus:~# OUT=`/usr/lib/nagios/plugins/check_disk --include-type=ext4 --warning=10% --critical=5%` ; if [ $? != 0 ] ; then echo $OUT ; fi
root@alexus:~# cat /etc/issue.net
Ubuntu 14.04.3 LTS
root@alexus:~#
et même si je suis capable de lancer EXACTEMENT un seul et même paquebot dans Shell, chaque fois que le travail est exécuté via cron, je reçois le courrier électronique suivant:
Subject: Cron OUT = `/ usr/lib/nagios/plugins/check_disk --include-type = ext4 --warning = 10/bin/sh: 1: Erreur de syntaxe: EOF lors de la substitution de citation inverse
par sujet, il semble que tout ce qui suit le signe %
est manquant.
Comment puis-je y échapper correctement sans casser mon script?
Vous devrez vérifier votre page de manuel crontab(5)
. Certaines implémentations de cron utiliseront %
comme un saut de ligne dans le champ de commande afin que vous puissiez passer des données à la commande sur stdin
* * * * * >$HOME/cron.cat.out cat%hello%world
Ensuite "cron.cat.out" contient 2 lignes:
hello
world
Tu auras besoin
$()
au lieu de backticks"$OUT"
- citez toujours vos variables à moins que vous n'ayez besoin des effets secondaires spécifiques de les laisser sans citation.@hourly OUT=$(/usr/lib/nagios/plugins/check_disk --include-type=ext4 --warning=10\% --critical=5\%) || echo "$OUT"
# ...................................................................................^..............^