[CentOS] 解決 crontab 無法讀取環境變數的問題【轉】
參考資料:http://blog.slogra.com/post-238.html
1. 問題描述
一段資料處理的 shell 程式,在 shell 中手動執行,可以正確執行。但是,把它放在 crontab 列表裡,就會報錯,提示 "matlab: command not found."。
AutoRefreshData.sh 的部分內容如下:
[[email protected] ~]$ cat /home/She/data/AutoRefreshData.sh #!/bin/bash ... MatlabFile='/mnt/L/Data/main4mat.m' chmod +x ${MatlabFile} matlab-nodesktop -nosplash -nojvm < ${MatlabFile} 1>running.log 2>running.err &
在終端下,AutoRefreshData.sh 可正確執行:
[[email protected] ~]$ /home/She/data/AutoRefreshData.sh [[email protected] ~]$ cat ~/running.log < M A T L A B (R) > Copyright 1984-2015 The MathWorks, Inc. R2015b (8.6.0.267246) 64-bit (glnxa64) August 20, 2015 For online documentation, see http://www.mathworks.com/support For product information, visit www.mathworks.com. >> >> >> >> >> >> >> /mnt/L/Data/matFile/jpl16228.mat >>
[[email protected] ~]$ cat ~/running.err
[[email protected] ~]$
將該 shell 指令碼新增到 crontab 中:
[[email protected] ~]$ crontab -l # part 2: refresh She data from FTP 08 12 * * * /home/She/data/AutoRefreshData.sh > /dev/null 2>&1
在 crontab 中,執行報錯,結果如下:
[[email protected] ~]$ cat ~/running.log [[email protected] ~]$ cat ~/running.err /home/She/data/AutoRefreshData.sh: line 111: matlab: command not found
2. Bug 原因分析與修復
原因分析:crontab 有一個壞毛病, 就是它總是不會預設的從使用者 profile 檔案中讀取環境變數引數,經常導致在手工執行某個指令碼時是成功的,但是到 crontab 中試圖讓它定期執行時就是會出錯。
修復:在指令碼檔案的開頭,強制要求匯入環境變數,可保萬無一失。
這樣的話,指令碼的頭部一律以下列格式開頭:
#!/bin/sh . /etc/profile . ~/.bash_profile
以 AutoRefreshData.sh 為例,它的頭部則由
[[email protected] ~]$ cat /home/She/data/AutoRefreshData.sh #!/bin/bash ... MatlabFile='/mnt/L/Data/main4mat.m' chmod +x ${MatlabFile} matlab -nodesktop -nosplash -nojvm < ${MatlabFile} 1>running.log 2>running.err &
改為:
[[email protected] ~]$ vi /home/She/data/AutoRefreshData.sh #!/bin/sh . /etc/profile . ~/.bash_profile ... MatlabFile='/mnt/L/Data/main4mat.m' chmod +x ${MatlabFile} matlab -nodesktop -nosplash -nojvm < ${MatlabFile} 1>running.log 2>running.err &
之後,更新 crontab 中的執行時間,立即測試,一切正常,不再報錯。
[[email protected] ~]$ cat ~/running.log < M A T L A B (R) > Copyright 1984-2015 The MathWorks, Inc. R2015b (8.6.0.267246) 64-bit (glnxa64) August 20, 2015 For online documentation, see http://www.mathworks.com/support For product information, visit www.mathworks.com. >> >> >> >> >> >> >> /mnt/L/Data/matFile/jpl16228.mat >> [[email protected] ~]$ cat ~/running.err [[email protected] ~]$
Done。
相關推薦
[CentOS] 解決 crontab 無法讀取環境變數的問題【轉】
參考資料:http://blog.slogra.com/post-238.html 1. 問題描述 一段資料處理的 shell 程式,在 shell 中手動執行,可以正確執行。但是,把它放在 crontab 列表裡,就會報錯,提示 "matlab: comm
解決crontab無法讀取環境變數
問題描述 設定一個crontab,*/1 * * * * /bin/bash /home/test/1.sh, 手動 sh /home/test/1.sh可以執行,但放到crontab裡卻無法執行, 問題所在: crontab預設使用者profile檔案中的環
UNIX下的LD_PRELOAD環境變數【轉】
前言 也許這個話題並不新鮮,因為LD_PRELOAD所產生的問題由來已久。不過,在這裡,我還是想討論一下這個環境變數。因為這個環境變數所帶來的安全問題非常嚴重,值得所有的Unix下的程式設計師的注意。 在開始講述為什麼要當心LD_PRELOAD環
spring+log4j配置檔案無法讀取環境變數問題
在spring-web專案中,log4j的配置位於log4j.properties檔案中,其中日誌路徑使用環境變數配置(配置在/etc/profile)。但是,實際執行該路徑沒有生效。如果直接寫路徑,是沒有問題的。 log4j.appender.logFile.File =
centos修改為網易YUM源【轉】
文件 all centos 網易yum源 base 運行 緩存 使用說明 yum 使用說明 首先備份/etc/yum.repos.d/CentOS-Base.repo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d
dubbo的一些預設變數【轉】
變數名 描述 預設值 用途 DEFAULT_IO_THREADS 預設IO執行緒 Math.min(Runtime.getRuntime().availableProcessors() + 1, 32) 建立
centos安裝配置hadoop超詳細過程【轉】
轉自:http://www.centoscn.com/image-text/install/2014/1121/4158.html 1、叢集部署介紹 1.1 Hadoop簡介 Hadoop是Apache軟體基金會旗下的一個開源分散式計算平臺。以Hadoop分散式檔案系統
Linux系統下Jsp環境部署【轉】
對於應用程式來說,context路徑是一個關鍵屬性,其也經常用於虛擬主機的配置及.war檔案中的URL對映。使用context可以降低系統負載,因為,當某URL請求到達tomcat時,如果沒有context,tomcat需要搜尋server.xml或context.xml的配置以確定此URL,否則則需要搜尋所
MAC環境下【AndroidStudio】無法載入Android專案問題的解決
最近這段時間,這個問題遇到過兩次。因為之前一直使用Windows開發環境且並沒有出現一次這種問題,而Mac環境出現了兩次,所以特別記錄一下這個問題的解決方式。 1、問題復現 首先,我們來看一看出問題時,AS是什麼情況。老規矩,上圖: (可以看到,直接是
【Java】【FAQ】【環境變數設定問題】錯誤:找不到或無法載入主類 "xxxxxx"
1、問題現象 首先宣告,程式碼絕對是沒有問題的。 F:\01 Java\01 Project\00 ConnectDatabase>java OperateOracle 錯誤: 找不到或無法載入主類 OperateOracle 2、解決辦法 出現此問題
STM32F407 讀保護,寫保護,解鎖過程【芯片已設置讀保護,無法讀取更多信息】
寫保護 stm32f407 讀保護 解鎖過程 硬件準備:CH340 USB轉TTL串口一個STM32F407 板子一塊設置從ISP啟動軟件準備:1,flash_loader_demo_v2.8.0.exe 或者 FlashLoader Demonstrator 2.8.0.msi 都可以下載地址:
【轉】Kafka某topic無法消費解決方案&Kafka某Topic數據清理
清0 logs -s 重點 找到 使用 on和off image ica 由於項目原因,最近經常碰到Kafka消息隊列某topic在集群宕機重啟後無法消費的情況。碰到這種情況,有三步去判斷原因所在: step A:如果用kafka串口(即console-consumer)
python os 設定讀取環境變數的幾種方法
專案中的跳板機是用的使用者公私鑰鑑權的,登入跳板機需要使用的每個人的name,因此如果將封裝的MySQL或者Redis方法中傳入USERNAME作為引數的話,感覺有點傻。因此,考慮將名字寫入環境變數。 兩種方法: 1、使用os.environ.setdefault方法寫入(或者直接
新版Mac上IDE中無法獲取環境變數的問題
新版Mac上IDE中無法獲取環境變數的問題 Mac下為IDE或者應用設定環境變數 Eclipe環境變數 Android Studio環境變數 Mac OS X environment variables and SAP GUI for Java 新增環境變數 launchctl se
CentOS檢視和修改PATH環境變數的方法 (轉)
檢視PATH:echo $PATH以新增mongodb server為列修改方法一:export PATH=/usr/local/mongodb/bin:$PATH//配置完後可以通過echo $P
【轉】【centos】啟動網絡卡報錯(Failed to start LSB: Bring up/down networking )解決辦法總結
今天一臺一直在用的虛擬機器重啟後,CRT連線不上,ip也ping不通,重啟網絡卡報錯,“Failed to start LSB: Bring up/down networking”,參考:http://blog.51cto.com/11863547/1905929,解決。 遇到這個錯誤好幾次,所以總結了一下
【轉】dede自定義模型會員無法投稿的解決方法
原文連結:點選跳轉 具體方法: 1、複製普通文章模型,增加了一個欄位,允許投稿,級別為註冊會員,組別不限制. 2、新建一個欄目,內容模型為此模型,且允許投稿. 3、在 系統設定->基本引數->會員設定中 “是否開放會員對自定義模型投稿:” 選擇了 “是”. 4、
Windows環境下Python 安裝庫 is not a supported wheel on this platform解決辦法【轉】
Windows環境下Python 安裝庫 is not a supported wheel on this platform解決辦法 在使用python進行pdf轉換圖片時,需要PythonMagick庫,但下載了許多whl都無法解決 解決方案 可能的原因
linux 環境變數設定方法總結(PATH/LD_LIBRARY_PATH)【轉】
PATH和LD_LIBRARY_PATH本質都是變數,所謂變數的意思就是由別人賦值產生的,直覺往往會讓我們新增和減少這個變數本身的某些路徑,實際上這是不正確的。正確的做法是我們要去修改賦予這個變數數值的那些配置檔案,加一條路徑或者減一條。說到底變數只關乎顯示,不關乎其
CentOS檢視和修改PATH環境變數的方法
檢視PATH:echo $PATH 以新增mongodb server為列 修改方法一: export PATH=/usr/local/mongodb/bin:$PATH //配置完後可以通過echo $PATH檢視配置結果。 生效方法:立即生效 有效期限:臨時改變,只能在當