Le script suivant dans crontab ne peut pas
0 1 * * * (cd /u01/prod; rsync -avz app 192.168.0.192:/u01/prod/) &>/home/applprod/backuplog/rsync_`date +%Y%m%d_%H%M%S`.log
Une fois exécuté, le journal /var/log/messages affiche :
Sep 22 22:50:01 ebsapp CROND[13389]: (applprod) CMD ((cd /u01/prod; rsync -avz app 192.168.0.192:/u01/prod/) &>/home/applprod/backuplog/rsync_`date +)
Il semble que la commande ait été tronqué.
J'ai donc encapsulé toutes les commandes à exécuter dans un script et les ai mises dans crontab pour exécution.
Mais quand j'ai vérifié la page de manuel de crontab plus tard, j'ai découvert que % a une signification particulière dans crontab :
The "sixth" field (the rest of the line) specifies the command to be run. The entire command portion of the line, up to a new- line 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 characters, and all data after the first % will be sent to the command as standard input.
Le problème est maintenant clair. Ce n'est pas que la commande crontab est tronquée, mais est comprise comme ayant une autre signification. solution Oui, échappez simplement %, et le script modifié devient :
03 23 * * * (cd /u01/prod; rsync -avz app 192.168.0.192:/u01/prod/) &>/home/applprod/backuplog/rsync_`date +\%Y\%m\%d_\%H\%M\%S`.log