【问题标题】:'7 days ago' date format issue in crontabcrontab 中的“7 天前”日期格式问题
【发布时间】:2014-10-15 17:13:21
【问题描述】:

我正在运行一个包含 curl 的 cron,其中包含 startDate 和 endDate 的值,其格式必须为 yyyy-mm-dd。 endDate 是今天,startDate 是 7 天前。整体格式为:

curl -o ~/location/filename.xml "http://url.asmx/do_this?&startDate=x&endDate=y"

使用固定的开始日期,这可以通过 macosx 上的终端运行:

&startDate=2014-10-01&endDate=`date +\%Y-\%m-\%d`"

但是,记住 startDate 应该比系统日期早 7 天,以下两种方法都会导致错误“指定的日期格式不正确。日期格式应为:YYYY-MM-DD,如 2011-12-24'

startDate=`date -d '7 days ago' +\%Y-\%m-\%d`&endDate=`date +\%Y-\%m-\%d`
startDate=`date --date="7 days ago"  +\%Y-\%m-\%d`&endDate=`date +\%Y-\%m-\%d`

这是使用 " ' 和 ` 的问题吗?

我在这里做错了什么?顺便说一句,我试图保持在单行命令行中,而不是在文件中使用脚本。

编辑:通过谷歌搜索以及复制和粘贴许多建议,我发现 Mac 论坛上的以下内容有效:

$(date -v-7d +%Y-%m-%d)

但是我以前没有遇到过 -v 。我想知道它是什么,它是特定于 Mac 的吗?这会在其他服务器上出现问题吗?

【问题讨论】:

    标签: bash cron


    【解决方案1】:

    这是使用 " ' 和 ` 的问题吗?

    大概吧。用 $() 替换 `` 你的命令有效:

    curl -o ~/location/filename.xml "http://url.asmx/do_this?&startDate=$(date -d '7 days ago' +\%Y-\%m-\%d)&endDate=$(date +\%Y-\%m-\%d)"
    

    【讨论】:

    • 恐怕不行。我现在正在使用日期值的变量运行 bash 脚本文件,但同样的问题。
    • 对我有用,但是由于您现在使用的是脚本,能否请您使用该脚本更新您的帖子?
    【解决方案2】:

    未引用的& 是命令终止符。它将 startDate 变量定义放在后台(子shell)中,因此它不会存在于当前shell中。演示:

    $ startDate=`date -d '7 days ago' +\%Y-\%m-\%d`&endDate=`date +\%Y-\%m-\%d`
    [1] 25595
    [1]+  Done                    startDate=`date -d '7 days ago' +\%Y-\%m-\%d`
    $ echo $startDate--$endDate
    --2014-10-14
    

    一些dates 将+%F 识别为+%Y-%m-%d 的简写

    此外,您必须小心在 crontab 条目中使用 date:除非转义,否则 % 字符将被转换为换行符。阅读您的 crontab(5) 手册页。

    【讨论】:

    • URL中其实还有其他变量:"url.asmx/do_this?&variable1=a&variable2=b&startDate=x&endDate=y"。所以我不清楚为什么 & 会影响开始日期变量而不是前面的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多