The "sixth" field (the rest of the line) specifies the command to be run. The entire command portion of the line, up to a newline or % character, will be executed by /bin/sh or by the shell specified in the SHELL variable of the cronfile. Percent-signs (%) in the command, unless escaped with backslash (), will be changed into newline charac- ters, and all data after the first % will be sent to the command as standard input.
Prenons un bash qui ouput sur sa sortie standard (stdout) et sur sa sortie d'erreur (stderr) :
echo good
echo bad >&2
echo vanish >&2
echo good!
Comment faire pour rediriger la sortie standard vers un fichier (ou /dev/null pour l'exemple) et filter la sortie d'erreur pour retirer la ligne "vanish" ?
Pour ça il faut utiliser un process substitution :
/root/test.bash 2> >(grep -v vanish >&2) >/dev/null
Bien pratique dans un crontab pour recevoir un peu moins de mail lorsqu'on a des "erreurs" acceptables (rsync vanished par exemple)
SHELL=/bin/bash
Pour en savoir plus sur les process substitution : http://tldp.org/LDP/abs/html/process-sub.html
Bon à savoir, pour rediriger la sortie standard d'un cron dans un fichier avec la date, penser à échapper les "%"
/path/to/log/dir/$(date +\%Y-\%m-\%d).log
A mettre au début d'un script qui se trouve dans un des dossiers /etc/cron.xxxx pour qu'il soit éxécuté par un utilisateur autre que root.
USER='some-low-privilege-user'
if [ whoami
!= "$USER" ]; then
sudo -u $USER "$0"
exit
fi
... rest of the script ...