標籤:
import cx_Oracle
Traceback (most recent call last):
File "", line 1, in ?
ImportError: libclntsh.so.10.1: cannot open shared object file: No such file or directory
看以下文章解決的,唯一比他幸運的是看了他的貼子,不用花半天~:)~~~~~~~~~~~~crontab 中 python 指令碼執行失敗的解決方案
寫伺服器程式的免不了要經常和 crontab 打交道,定時執行一些指令碼什麼的。大部分情況下都是 bash 的一些 shell 指令碼,但 shell 我不是很熟悉,於是在很多情況下都直接寫 Python 指令碼來搞定它。今天寫了一個操作 PostgreSQL 資料庫的 Python 指令碼,放到 crontab 中定時執行的時候,時間到了卻沒有任何反映。但是如果在命令列下直接執行的話,沒有任何問題。
首先看看 crontab 的日誌(/var/log/cron),日誌中顯示指令碼定時執行了。那麼一定是在 crontab 運行該指令碼的時候報錯。直接在 Python 指令碼中從第一行開始寫一個大大的 try 模組,顯示一下 Exception 的內容。果然,抓到了…… 錯誤記錄檔顯示顯示 Python 找不到 libpq.so.5 這個 PostgreSQL 的庫。
原來 crontab 的運行環境和我們用 root 登入進去的環境都是不同的,需要在運行 Python 指令碼前重新設定一下啟動並執行環境變數如 LD_LIBRARY_PATH。這下比較好辦了,直接寫一個 shell 指令碼,設定一下環境變數,再調用 Python 吧。 libpq.so.5 這個庫我是裝在 /usr/local/pgsql/lib 中。最後的指令碼如下:
搞定,crontab 又跑得歡快起來了。
折騰了一個上午,寫下來備忘。
crontab 中 python(cx_Oracle)指令碼執行時需要使用者環境變數,怎麼辦??