Crontab執行java/spark-shell/spark-submit 異常解決方法
現象:
java/spark-shell/spark-submit 語句在linux shell中直接執行時沒有任何問題,但是放到crontab中就出異常,且異常一般都拋在一些基礎庫裡,讓人感覺非常莫名,比如這種:
Traceback (most recent call last):
File "/usr/lib64/python2.4/logging/__init__.py", line 731, in emit
msg = self.format(record)
File "/usr/lib64/python2.4/logging/__init__.py", line 617, in format
return fmt.format(record)
File "/usr/lib64/python2.4/logging/__init__.py", line 408, in format
s = self._fmt % record.__dict__
KeyError: 'funcName'
原因:
由於crontab使用了自己獨立的一套環境變數,與當前linux使用者的path是不一樣的。因此很多依賴於PATH的命令語句都會無法執行(比如依賴於python,或者依賴於java)。
可以看這裡:https://stackoverflow.com/questions/2388087/how-to-get-cron-to-call-in-the-correct-paths
解決方法1:
#在當前使用者的linux shell下執行下列命令,獲取當前的path資訊,複製到剪貼版中:
echo $PATH
#將PATH資訊加入到crontab中:
crontab -e
#在檔案首部新增兩個空行,在第一行增加下列資訊。其中<$PATH> 改為你剪貼簿中的值:
PATH=<$PATH>
解決方法2:(該方法比較安全,推薦)
#直接依次執行如下命令修改crontab,而後crontab -e 就可以正常用了。
echo PATH=$PATH > tmp.cron
echo >> tmp.cron
crontab -l >> tmp.cron
crontab tmp.cron
轉載請註明出處:http://blog.csdn.net/suranxu007/article/details/78562153