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