Linux下oracle用戶crontab不生效的解決辦法

這個DB以前的老服務器上有一個shell,放在root用戶下,用來執行oracle的每週二自動全庫備份。linux

如今DB遷移了,換到新的服務器下,想用oracle用戶來完成這個操做,結果一開始測試的時候不成功,自動任務寫好沒法自動執行。shell

  • 嘗試手動執行shell
    [oracle@oradb2 ~]$ /ora_bak/dbbak/oracle_backup.shbash

發現能夠手動執行成功:
圖片描述服務器

  • 設置自動任務oracle

    30 11 * * 3 /ora_bak/dbbak/oracle_backup.sh
    由於昨天恰好是週三,因此自動任務測試的時候定義爲:每週三的11:30分測試

  • 查看報錯
    到了11點30分01秒的時候,這個cron開始執行,可是失敗了,從日誌中能夠看到以下信息:
    圖片描述spa

  • 問題分析
    從報錯上看,linux報出了一個找不到expdp命令的錯誤,可是咱們手動還能執行,這說明是否是shell裏寫的有些問題呢?日誌

咱們來看一下這個shell:code

#!/bin/sh
rq=`date +"%Y%m%d"`
expdp xxxxx/xxxxx directory=DUMP_DIR dumpfile=xxx_bak$rq.dmp logfile=xxx_bak$rq.log schemas=xxxx

能夠看到,很簡單的兩條命令而已,那爲啥自動執行不行呢?圖片

  • 展開聯想
    老的DB服務器上,用的root帳號執行,新的服務器上,用的oracle帳號執行。
    這是一個比較明顯的區別,應該就是這裏有問題,再往下想一下,可能跟不一樣用戶的環境變量有關。

    正是由於環境變量的關係,因此致使oracle用戶在執行cron的時候,找不到expdp這個命令,那麼爲何oracle找不到呢?答案是:shell裏沒指定環境變量。

  • 問題解決

咱們修改一下shell:

#!/bin/sh
. /etc/profile
. ~/.bash_profile  
rq=`date +"%Y%m%d"`
expdp xxxx/xxxx directory=DUMP_DIR dumpfile=xxx_bak$rq.dmp logfile=xxx_bak$rq.log schemas=xxx

此次就沒有報錯了,cron準時執行。

相關文章
相關標籤/搜索