今天遇到一個問題:
一個python腳本命令行運行時很正常,放到crontab中就無法工作,日誌也沒有記錄,找了半天,終於發現問題所在。
在腳本最上方,程序如下:
#!/usr/local/bin python
# coding=utf8
import cx_Oracle
import sys
import time
注意,這裏
import cx_Oracle
cx_Oracle需要依賴oracle的ORACLE_HOME環境。我發現ORACLE_HOME定義在/etc/profile下,在這裏修改的內容是對所有用戶起作用的,但是對crontab是不起作用的。以下是各個文件的一個作用域:
(1)/etc/profile: 此文件爲系統的每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行. 並從/etc/profile.d目錄的配置文件中搜集shell的設置。
(2)/etc/bashrc: 爲每一個運行bash shell的用戶執行此文件.當bash shell被打開時,該文件被讀取。
(3)~/.bash_profile: 每個用戶都可使用該文件輸入專用於自己使用的shell信息,當用戶登錄時,該文件僅僅執行一次!默認情況下,他設置一些環境變量,執行用戶的.bashrc文件。
(4)~/.bashrc: 該文件包含專用於你的bash shell的bash信息,當登錄時以及每次打開新的shell時,該該文件被讀取。
(5)~/.bash_logout: 當每次退出系統(退出bash shell)時,執行該文件. 另外,/etc/profile中設定的變量(全局)的可以作用於任何用戶,而~/.bashrc等中設定的變量(局部)只能繼承 /etc/profile中的變量,他們是"父子"關係。
(6)~/.bash_profile 是交互式、login 方式進入 bash 運行的~/.bashrc 是交互式 non-login 方式進入 bash 運行的通常二者設置大致相同,所以通常前者會調用後者。
解決辦法:
30 7 * * * . /etc/profile; /usr/local/bin/python2.7 /data/storeDataToOracleDB.py &
這裏加上了
. /etc/profile;
ok,問題解決。