0

我作为“ins”用户的 crontab 条目是这样的:

* * * * * /usr/bin/ksh /apps/swbkp/swbkp.sh

脚本是:

#! /usr/bin/ksh

. /apps/ins/.profile

cdate=$(date +'%y%m%d')

/apps/omni/bin/swmml -e "backup-node:" >> /apps/swbkp/swerrr1.$cdate

#
if [[ -f /apps/omni/conf/archive.C7M3UAA.500.$cdate ]]
then
   mv -f /apps/omni/conf/archive.C7M3UAA.500.$cdate /apps/swbkp/
elif [[ -f /apps/omni/labeir1/dffile/archive.C7M3UAA.500.$cdate ]]
then
   mv -f /apps/omni/labeir1/dffile/archive.C7M3UAA.500.$cdate /apps/swbkp/
else
   printf "Backup archive File not present to move"
fi >> /apps/swbkp/swerrr1.$cdate
#

注意:/apps/omni/bin/swmml -e "backup-node:"这一行只是在我的系统上创建一个备份文件类型archive.C7M3UA.500.<current date>

2奇怪的事情发生:

  1. 生成的备份文件是:

    -rw-r--r-- 1 根 165 8 月 28 日 21:55 /apps/omni/labeir1/dffile/archive.C7M3UAA.500.130828

移至 时/apps/swbkp,时间戳为 1 分钟前:

-rw-r--r-- 1 root root  165 Aug 28 21:54 archive.C7M3UAA.500.130828
  1. 没有任何东西被重定向到/apps/swbkp/swerrr1.$cdate文件

    -rw-r--r-- 1 ins 0 8 月 28 日 21:24 swerrr1.130828

而当我从终端运行脚本时,一切正常,即文件在备份文件夹和移动文件夹中具有相同的时间戳,并且输出也记录在日志文件中。

请帮助

4

2 回答 2

0

看看/apps/ins/.profile它执行的文件 - 如果它没有在终端中运行,这些文件通常有一个条件,即提前退出脚本。

例如:

[ -z "$PS1" ] && return

这可能会改变脚本的行为(甚至跳过它,如果exit用于代替return)。至少,您会错过别名、可能的 PATH 更改以及.profile脚本中设置的其他内容,这将影响您的主脚本是否以及如何运行。

尝试. /apps/ins/.profile在上面的脚本中注释该行,看看它是否仍然在终端中运行。如果是这样,请像从 crontab 中那样运行它,看看它是否能解决您的问题。

于 2013-08-29T14:17:28.010 回答
0

这可能已经得到解答,但对于任何寻求帮助的人:

在 crons 中使用日期/时间戳时,您需要像下面这样转义“百分比”:

cdate=$(date +'\%y\%m\%d') instead of cdate=$(date +'%y%m%d')

如果在 yaml/Ansible 剧本中使用它,则需要双重转义或转义,例如:

$(date +'\\%y\\%m\\%d')

最终 cron 应该看起来像

* * * * * script.sh > /tmp/script_$(date +\%y\%m\%d).log 2>&1

于 2017-08-02T15:56:34.203 回答