【问题标题】:Shell script not working after scheduling it in crontab在 crontab 中安排后,Shell 脚本无法正常工作
【发布时间】:2016-07-05 13:43:35
【问题描述】:

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

谢谢大家。

【问题讨论】:

  • 你的 cronjob 表达式是什么?
  • 大家好,我用 -l 安排了这项工作,它似乎奏效了。这就是我现在安排工作的方式 */1 * * * * /bin/bash -l /home/oracle/dba/scripts/monitor/db_mode.sh
  • 不错!请edit您的问题与这些重要细节
  • ORACLE_HOME 设置在哪里?最后一行应该是“>”还是“>>”?您也可以尝试将 shebang 更改为 /bin/sh

标签: shell crontab


【解决方案1】:

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

$ORACLE_HOME

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

通常从 cron 运行时不依赖任何环境变量,因此如果 sqlplus 依赖于环境变量,您必须在脚本中设置它们以便看到它们

原因是 cron 没有从普通 shell 运行,并且它没有在 .bashrc 等中登录到普通 shell 时得到的初始化

【讨论】:

    【解决方案2】:

    首先尝试获取您的 .bashrc 或 .profile:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2023-03-04
        • 2012-03-10
        • 1970-01-01
        • 2021-10-25
        • 1970-01-01
        • 2017-07-13
        • 2018-12-27
        • 2015-01-24
        相关资源
        最近更新 更多