在crontab

时间:2016-07-05 13:43:35

标签: shell crontab

嗨以下脚本在从命令提示符执行时工作正常但在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

谢谢大家。

3 个答案:

答案 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。