標籤:
1、查看任務[[email protected] OracleBackA]$ crontab -l
2、新增任務[[email protected] OracleBackA]$ crontab -e
3、每天14點40執行/backup/OracleBackA/sh.sh 指令碼,日誌輸出到 /backup/OracleBackA/shlog.txt
40 14 * * * /backup/OracleBackA/sh.sh &>> /backup/OracleBackA/shlog.txt
問題
1、/bin/sh: /backup/OracleBackA/sh.sh: Permission denied
shell指令碼沒有執行許可權,chmod 755 sh.sh
2、/backup/OracleBackA/sh.sh: line 59: ctxlc: command not found
/backup/OracleBackA/sh.sh: line 67: sqlplus: command not found
/backup/OracleBackA/sh.sh: line 69: ctxlc: command not found
/backup/OracleBackA/sh.sh: line 71: [: : integer expression expected
/backup/OracleBackA/sh.sh: line 106: sqlplus: command not found
/backup/OracleBackA/sh.sh: line 108: [: : integer expression expected
/backup/OracleBackA/sh.sh: line 136: [: : integer expression expected
/backup/OracleBackA/sh.sh: line 136: [: : integer expression expected
你可能已經注意到上面的例子中,每個命令都給出了絕對路徑。當使用c r o n t a b運行s h e l l
指令碼時,要由使用者來給出指令碼的絕對路徑,設定相應的環境變數。記住,既然是使用者向c r o n
提交了這些作業,就要向c r o n提供所需的全部環境。不要假定c r o n知道所需要的特殊環境,它
其實並不知道。所以你要保證在s h e l l指令碼中提供所有必要的路徑和環境變數,除了一些自動
設定的全域變數。
有兩個方法,在shell裡export或者複製到/etc/profile裡面
第一種解決辦法:
查看運行c r o n t a b任務的使用者的環境變數:.bash_profile檔案 vi /home/oracle/.bash_profile
將export PATH ORACLE_BASE ORACLE_HOME ORACLE_SID 這些路徑都複製到shell指令碼中,放在shell指令碼開頭
shell指令碼中:
export ORACLE_BASE=/u01/oracleexport ORACLE_HOME=/u01/oracle/app/12.1.0
第二種解決辦法:
將.bash_profile檔案中的設定都複製到/etc/profile 檔案中,不過要用root使用者
Linux 定時執行shell指令碼_crontab