This document assumes knowledge of
The purpose of this document is to explain how to cope with the percentage sign (%) in a crontab entry. Usually, a % is used to denote a new line in a crontab entry. The first % is special in that it denotes the start of STDIN for the crontab entry's command. A trivial example is: * * * * * cat - % another minute has passed This would output the text another minute has passed After the first %, all other %s in a crontab entry indicate a new line. So a slightly different trivial example is: * * * * * cat - % another % minute % has % passed This would output the text another minute has passed Note how the % has been used to indicate a new line. The problem is how to use a % in a crontab line to as a % and not as a new line. Many manuals will say escape it with a \. This certainly stops its interpretation as a new line but the shell running the cron job can leave the \ in. For example: * * * * * echo '\% another \% minute \% has \% passed' would output the text \% another \% minute \% has \% passed Clearly, not what was intended. A solution is to pass the text through sed. The crontab example now becomes: * * * * * echo '\% another \% minute \% has \% passed'| sed -e 's|\\||g' This would output the text % another % minute % has % passed which is what was intended. This technique is very useful when using a MySQL command within a crontab. MySQL command can often have a % in them. Some example are:
So, to have a crontab entry to run the MySQL command mysql -vv -e "SELECT * FROM table WHERE name LIKE Fred%'" member_list would have to appear in the crontab as echo "SELECT * FROM table WHERE name LIKE 'Fred\%'" | sed -e 's|\\||g' | mysql -vv member_list Pulling the crontab entry apart there is:
|