如何在Solaris中设置昨天的cron作业?

时间:2015-02-13 17:40:46

标签: perl date unix cron solaris

我想在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 -vdate -d不起作用;只有-u-a选项适用于Unix中的日期:

date: illegal option -- d
usage: date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]

我该怎么做?

2 个答案:

答案 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