![Linux 下的 cron 中未执行带有格式化字符串的 date 命令](https://linux22.com/image/739493/Linux%20%E4%B8%8B%E7%9A%84%20cron%20%E4%B8%AD%E6%9C%AA%E6%89%A7%E8%A1%8C%E5%B8%A6%E6%9C%89%E6%A0%BC%E5%BC%8F%E5%8C%96%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%20date%20%E5%91%BD%E4%BB%A4.png)
我有以下 crontab:
# m h dom mon dow command
* * * * * /bin/date >> /tmp/date.log 2>&1
* * * * * /bin/date "+%F_%H-%M-%S" >> /tmp/date2.log 2>&1
第一个命令正确执行。将当前日期写入/tmp/date.log
第二个命令不起作用。/tmp/date2.log
永远不会创建。唯一的区别是第二个日期命令有一个格式化字符串作为参数。在 cronjob 之外,第二个日期命令 ( /bin/date "+%F_%H-%M-%S"
) 工作正常。
造成这种行为的原因是什么?
我的系统:
uname -a
Linux corsair 4.15.0-50-generic #54-Ubuntu SMP Mon May 6 18:46:08 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
lsb_release -a
Distributor ID: LinuxMint
Description: Linux Mint 19.1 Tessa
Release: 19.1
Codename: tessa
答案1
命令中未转义的百分号将被换行符替换,请参阅crontab(5)。您需要在它们前面加上反斜杠。