脚本在命令行中运行正常,但不是从crontab运行

时间:2013-08-28 16:35:42

标签: linux shell scripting crontab

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

* * * * * /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 root root 165 Aug 28 21:55 /apps/omni/labeir1/dffile/archive.C7M3UAA.500.130828

  2. 当移动到/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 ins 0 Aug 28 21:24 swerrr1.130828

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

      请帮助

2 个答案:

答案 0 :(得分:0)

查看/apps/ins/.profile及其执行的文件 - 这些文件通常具有条件,如果它不在终端中运行,则会提前退出脚本。

例如:

[ -z "$PS1" ] && return

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

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

答案 1 :(得分: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