一尘不染

cron执行的命令是否有特殊限制?

linux

我有一个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页面甚至根本不包含百分号,因此我认为它们还不错。


阅读 284

收藏
2020-06-07

共1个答案

一尘不染

您必须使用反斜杠转义百分号:

0 0 * * * pg_dump DB_NAME > /path/to/dumps/`date +\%Y\%m\%d`.dmp

来自man 5 crontab

“第六”字段(行的其余部分)指定要运行的命令。该行的整个命令部分,直到换行符或%字符,将由/ bin /
sh或crontab文件的SHELL变量中指定的shell执行。除非使用反斜杠(\)进行转义,否则命令中的百分号(%)将更改为换行符,并且第一个%之后的所有数据将作为标准输入发送到命令。无法将单个命令行拆分为多行,例如shell的尾随“
\”。

2020-06-07