嗨以下脚本在从命令提示符执行时工作正常但在cron中调度时没有给出任何结果。请帮忙。
#!/bin/bash
db_mode()
{
$ORACLE_HOME/bin/sqlplus -s << eof
system/xxxxx@<DB_NAME>
SET LINES 132
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
select open_mode from v\$database;
exit;
eof
}
state=`db_mode`
echo $state > /home/oracle/dba/scripts/monitor/state.log
大家好,
我使用-l安排了这项工作,但它似乎有效。 这就是我现在安排工作的方式
* / 1 * * * * / bin / bash -l /home/oracle/dba/scripts/monitor/db_mode.sh
早些时候我将其安排为
* / 1 * * * * / bin / bash /home/oracle/dba/scripts/monitor/db_mode.sh
谢谢大家。
答案 0 :(得分:1)
从cron
运行时,脚本看不到这个变量$ ORACLE_HOME
使用完整路径,它应该工作
一般来说,从cron运行时不依赖于任何环境变量,所以如果sqlplus依赖于环境变量,你必须在脚本中设置它们才能看到它们
原因是cron没有从普通shell运行,并且在.bashrc等登录到普通shell时没有初始化
答案 1 :(得分:0)
首先尝试采购.bashrc或.profile:
*/1 * * * * source /home/oracle/.bashrc; /home/oracle/dba/scripts/monitor/db_mode.sh
答案 2 :(得分:0)
Cron不会在这里和那里转储输出,因为它没有以“标准输入”或“标准输出”运行,因为它没有与之关联的“控制终端”。只有指定文件的I / O才能正常工作。别介意$ ORACLE_JAZZ。