這兩天一直在忙於將一項任務全自動化,以便節省人工操做,因爲服務器是linux,用到了crontab命令,具體命令大體以下:
46 21 * * * night_job.sh>>night_job.log 2>&1
爲了便於跟進查詢運行狀態和日誌,將任務的輸出重定向到night_job.log日誌中,因爲在night_job.sh中包含了
數量衆多的sqlldr:sqlloader導入命令和sqlplus命令,開始測試時並未獲得預期的結果,經過日誌觀察到
line 136: sqlldr: command not found
line 1: sqlplus: command not found
而當前用戶的PATH環境變量中已經包含了$ORACLE_HOME/bin,按理說應該讀取到,推測是多是crontab命令並無初始化當前用戶下的環境變量致使。
綜合了網上的其餘文章,經過以下幾種方式解決:
一、將.bash_profile中的設置拷貝到crontab執行的腳本中
2 、在crontab執行的shell腳本先執行./bash_profile
三、source dir/.bash_profile
以上三種處理方式中
1最繁瑣,若是用戶下增長環境變量設置,可能仍然須要修改該腳本
2相對簡單些,可是./執行要切換到用戶根目錄執行,在執行其餘腳本以前要確保路徑是否正確
3最簡單,直接加載環境變量便可
按照3中的方式在其餘任務運行以前加入該命令,任務運行成功。問題解決。 linux