我有一个crontab看起来像
crontab
0 0 * * * pg_dump DB_NAME > /path/to/dumps/`date +%Y%m%d`.dmp
当我手动运行它时效果很好,但是当我运行它时效果cron不佳。浏览日志后,我看到
cron
Dec 12 00:00:01 localhost crond[17638]: (postgres) CMD (pg_dump DB_NAME > /path/to/dumps/`date +)
看起来好像是百分号的问题,但是man页面甚至根本不包含百分号,因此我认为它们还不错。
man
您必须使用反斜杠转义百分号:
0 0 * * * pg_dump DB_NAME > /path/to/dumps/`date +\%Y\%m\%d`.dmp
来自man 5 crontab:
man 5 crontab
“第六”字段(行的其余部分)指定要运行的命令。该行的整个命令部分,直到换行符或%字符,将由/ bin / sh或crontab文件的SHELL变量中指定的shell执行。除非使用反斜杠(\)进行转义,否则命令中的百分号(%)将更改为换行符,并且第一个%之后的所有数据将作为标准输入发送到命令。无法将单个命令行拆分为多行,例如shell的尾随“ \”。