【发布时间】:2018-06-13 02:54:14
【问题描述】:
我有 bash 脚本,并放入了 crontab。它每 10 分钟运行一次。当我手动运行它时,它会给出完美的结果。它创建“.tmp”文件,这些“.tmp”文件不为空,但 Crontab 结果与我预期的不同。它只创建“.tmp”文件。 “.tmp”文件的内容是空的。在这台计算机上有多个用户。会不会是用户权限问题?主要原因是什么?
提前谢谢..
抱歉,我忘记了 :) 我的代码。
export GGATE=/ggate/ggs11g
alias gate='clear;cd $GGATE;./ggsci'
export ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/dbhome_1
export ORACLE_SID=KNNPRO17_1
export PATH=$PATH:$ORACLE_HOME/bin:$LD_LIBRARY_PATH:${GGS_HOME}
export LIBPATH=$ORACLE_HOME/lib:$GGS_HOME:$PATH
export LD_LIBRARY_PATH=$PATH:$ORACLE_HOME:$ORACLE_HOME/lib:$GGS_HOME
MYGGSCI=$GGATE/ggsci
LOGDIR=$GGATE/scripts/logs
GGSLAGFILE01=${LOGDIR}/ggslagfile01.tmp
GGSLAGFILE02=${LOGDIR}/ggslagfile02.tmp
GGSLAG_EMAIL=${LOGDIR}/ggslag_email.tmp
$MYGGSCI << eof > $GGSLAGFILE01
info all
eof
cat $GGSLAGFILE01 | egrep -i '(EXTRACT)'|cut -d":" -f 1,2,3,4,5,6 | tr ":" " "|tr -s '[:space:]'|cut -d" " -f1,2,3,4,5,6,7,8,9 >$GGSLAGFILE02
awk '{if ( $4 > 00 || $5 >=30 || $7 > 00 || $8 >=30 ) {print $1 " " $3 " HAS LAG of " $4" hour " $5 " min for checkpoint " $7 " hour " $8 " min -- at -- " d "\n" }}' d="$(date)" $GGSLAGFILE02 > $GGSLAG_EMAIL
if [ -s $GGSLAG_EMAIL ]
then
mailx -s "${ORACLE_SID} Extract LAG ! on GoldenGate" "it.io.db.goldengate@vodafone.com" < $GGSLAG_EMAIL
exit 1
else
exit 0
fi
和
我的 crontab 是
00,10,20,30,40,50 * * * * ksh /export/GoldenGate/scripts/check.sh 2>/dev/null
【问题讨论】:
-
Crontab 作业不应假设特定环境。对 crontab 文件中的所有文件和可执行文件使用绝对路径(给出
ksh的完整路径)。对于脚本,您可以将PATH变量设置为安全的默认值,然后使用cd来确保正确的工作目录。另外,请确保所有文件都相对于设置的工作目录或具有绝对路径。 -
你为什么要扔掉stderr? Cron 会直接在您的收件箱中将问题邮寄给您。
-
不要在脚本中使用别名;使用一个功能。
gate () { clear; cd "$GGATE"; .ggsci; }.