我想在Unix服务器(Solaris)上设置昨天日期的cron作业。我试过了:
TZ=CST+24 date +%Y%m%d
但得到了
had TZ=CST+24: not found
我试过
`perl -mPOSIX -e 'print POSIX::strftime("%Y%m%d",localtime(time() - 86400)) '`
这样可行,但我不确定所有客户端都在他们的计算机上安装了Perl。
date -v
和date -d
不起作用;只有-u
和-a
选项适用于Unix中的日期:
date: illegal option -- d
usage: date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]
我该怎么做?
答案 0 :(得分:1)
cron
期望运行命令,而不是shell可以解析的行。但是,您可以将shell作为命令运行,并将该行作为参数:
bash -c 'TZ=CST+24 date +%Y%m%d'
也可能需要指定bash
的完整路径。
答案 1 :(得分:1)
尽量让cron中的行容易理解。像
这样的东西5 * * * * /mypath/rotate.sh
脚本应该具有使日期变化的逻辑。
您已经发现操纵时区可以在几个小时内更改时钟。更加复杂的是夏令时。由于夏令时,24小时前可以是今天或前天。
你确定昨天是20或30小时前。哪一个?好吧,最近的一个不是今天。
echo "$(TZ=GMT+30 date +%Y-%m-%d)\n$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1
以上命令适用于ksh。当你使用bash时,你需要echo -e:
echo -e "$(TZ=GMT+30 date +%Y-%m-%d)\n$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1