Cron 作业执行 shell 脚本发送空电子邮件

问题描述 投票:0回答:1

我写了一个shell脚本来自动检查Oracle Data Guard的状态并通过邮件发送。

如果我手动执行脚本,它就会像它应该的那样工作。

如果我通过 cronjob 执行脚本,它只会发送空电子邮件。 此行为仅在我们将服务器从 oracle linux 7 更新到 oracle linux 8 后才开始。

这是脚本:

#!/bin/bash

#. ~/envBIPROD.sh
source /home/oracle/.bash_profile
source /home/oracle/envBIPROD.sh

dgmgrl -silent  user/pass >biprod.txt << EOF
show configuration;
show database p1biprod;
show database s1biprod;
EOF

cat biprod.txt | mail -r $(whoami).$(hostname -s)@hostname.tld -s "DATA GUARD Status biprod" [email protected]

这是设置 oracle home 的“envBIPROD.sh”脚本:

export ORACLE_SID=BIPROD1
export ORAENV_ASK=NO
. oraenv
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH

当脚本由 cron 运行时,文件“biprod.txt”只是空的。

bash cron oraclelinux
1个回答
0
投票

它可能在您无权创建文件的目录中运行,因此

>biprod.txt
失败。如果
biprod.txt
只在脚本运行时存在,那么请执行以下操作:

biprod=$(mktemp) || exit 1
trap 'rm -f "$biprod"; exit' EXIT

dgmgrl -silent  user/pass > "$biprod" 
...

cat "$biprod" | ...

尽管您几乎可以肯定可以使用

< "$biprod" mail ...
而不是
cat "$biprod" | mail ...
)。添加一些
printf
来报告失败对您来说也没什么坏处。

© www.soinside.com 2019 - 2024. All rights reserved.