我的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>
类型的系统上创建备份文件
生成的备份文件是:
-rw-r - r-- 1 root root 165 Aug 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
没有任何内容被重定向到/apps/swbkp/swerrr1.$cdate
文件
-rw-r - r-- 1 ins ins 0 Aug 28 21:24 swerrr1.130828
当我从终端运行脚本时,一切都运行正常,即文件在备份文件夹和移动文件夹中具有相同的时间戳,并且输出也会记录在日志文件中。
请帮助
答案 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