我正在尝试使用类似这样的方法在 cron 作业中获取过去的日期。但DATE
变量始终为空。
DATE=date -d "$date -1 days -1 months" +%Y-%m
* * * * * /bin/echo "Date: $($DATE) Test" >> /tmp/crontab.log 2>&1
我知道 crontab 有多棘手,这要归功于这个问题有很好的答案,但这里的问题似乎不是标志%
,因为上面的代码运行良好:
DATE=date -d @2147483647 +%Y-%m
* * * * * /bin/echo "Date: $($DATE) Test" >> /tmp/crontab.log 2>&1
但如果我使用引号,那么工作就无法再次获取日期。
DATE=date -d"@2147483647" +%Y-%m
* * * * * /bin/echo "Date: $($DATE) Test" >> /tmp/crontab.log 2>&1
我尝试用单引号、双引号替换引号,转义引号,但这些选项都无法解决问题。我需要引号来指定部分"$date -1 days -1 months"
。有没有办法在 crontab 中执行此操作而无需创建外部脚本?
CentOS 7 和 crontab(cronie-1.4.11-23.el7.x86_64)
答案1
该问题与 无关,cron
但与 中的变量扩展有关$()
。date
子 shell 中调用的命令$()
看不到参数-d "$date -1 days -1 months"
,而是多个参数:-d
"$date
-1
days
-1
months
。您可能想改用$(eval $DATE)
。