crontab の次のスクリプトは、
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
中に実行できません実行すると、/var/log/messages ログに次のように表示されます。
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 +)
コマンドが切り詰められているようです。
そこで、実行するすべてのコマンドをスクリプトにカプセル化し、実行用に crontab に置きました。
しかし、後で crontab のマンページを確認したところ、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.
問題は明らかになりました。crontab コマンドが切り詰められているわけではありませんが、は別の意味があると理解され、解決策は % をエスケープすることです。変更されたスクリプトは次のようになります:
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