Shell脚本在crontab中调度后不工作

Shell脚本在crontab中调度后不工作,shell,crontab,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;

您好,下面的脚本在命令提示符下执行时工作正常,但在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
#/bin/bash
db_模式()
{
$ORACLE_HOME/bin/sqlplus-s/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


谢谢大家。

从cron运行时,脚本通常看不到此变量

$ORACLE_HOME

使用完整路径,它应该可以工作

一般来说,从cron运行时不依赖任何环境变量,因此如果sqlplus依赖于环境变量,则必须在脚本中设置它们,以便可以看到它们


这是因为cron不是从普通shell运行的,并且它没有在.bashrc等中登录到普通shell时得到的初始化。请首先尝试寻找.bashrc或.profile:

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

Cron不会到处转储输出,因为它不会使用“标准输入”或“标准输出”运行,因为它没有“控制终端”与之关联。只有与指定文件之间的I/O才能工作。不要介意$ORACLE_JAZZ。

你的cronjob表达式是什么?大家好,我用-l计划了作业,它似乎已经工作了。这就是我现在计划作业的方式。*/1****/bin/bash-l/home/ORACLE/dba/scripts/monitor/db_mode.shnice!请用这些回答你的问题重要细节ORACLE_HOME set在哪里?最后一行是“>”还是“>>”?您也可以尝试将shebang更改为/bin/sh