1. 程式人生 > >Crontab執行java/spark-shell/spark-submit 異常解決方法

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