2016-07-05 62 views
1

嗨下面的脚本在从命令提示符执行时工作正常,但在cron中计划时没有给出任何结果。请帮忙。shell脚本在crontab中安排后无法工作

#!/bin/bash 
db_mode() 
{ 
$ORACLE_HOME/bin/sqlplus -s << eof 
system/[email protected]<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 * * * * /斌/庆典-l /home/oracle/dba/scripts/monitor/db_mode.sh

早些时候,我安排它作为

*/1 * * * * /斌/庆典/home/oracle/dba/scripts/monitor/db_mode.sh

感谢所有。

+1

你的cronjob表达式是什么? – fedorqui

+0

大家好,我安排的工作与-l,它似乎工作。这就是我现在如何安排这项工作*/1 * * * */bin/bash -l /home/oracle/dba/scripts/monitor/db_mode.sh –

+0

不错!请用这些重要的细节编辑你的问题 – fedorqui

回答

1

大多是从cron运行时,该变量没有被脚本看到

$ ORACLE_HOME

使用完整路径,它应该在一般不工作

依赖于任何环境从cron运行时变量,所以如果sqlplus取决于环境变量,你必须在脚本中设置它们,以便看到它们。

这样做的原因是,cron是不正常shell中运行,它不具有的.bashrc等洛在正常的外壳,当你初始化

0

尝试采购你的.bashrc或者第一的.profile:

*/1 * * * * source /home/oracle/.bashrc; /home/oracle/dba/scripts/monitor/db_mode.sh 
0

因为它没有“标准输入”或“标准输出”,所以Cron不会在这里和那里转储输出,因为它没有与其关联的“控制终端”。只有指定文件的I/O才能工作。没关系$ ORACLE_JAZZ。