1. 程式人生 > >linux定時任務生產java服務無法執行問題群友案例

linux定時任務生產java服務無法執行問題群友案例

linux定時任務crond export變數問題群友案例

來自網友兄弟 北京@Grady(254553457) 的總結。

1)我寫了一個重啟resin的指令碼,由於業務原因,需要定時在某一個時間重啟下resin伺服器,於是就在
crontab裡配置瞭如下內容:
50 17 * * 1-5 root /usr/local/bin/resin_restart.sh
其中,resin_restart.sh內容如下:
#!/bin/sh
/usr/local/bin/xxresin_stop.sh
/usr/local/bin/xxresin_start.sh

2)有問題的時刻到來了,伺服器雖然定時起來了,但是卻報瞭如下錯誤:
Resin can't load com.sun.tools.javac.Main.  Usually this means that the JDK tools.jar is missing from the classpath, 
possibly because of using a JRE instead of the JDK.  
You can either add tools.jar to the classpath or change the compiler to an external one with <java compiler='javac'/> or jikes.
但是,明明已經在profile裡配置了環境變數,為啥還找不到呢。折騰了需求沒有搞定。

3)後來在QQ交流群114580181,找到了熱心下老男孩老師,並請教,得到的回答是:
由於export變數問題導致:具體為,crontab執行shell時只能識別為數不多的系統環境變數,
普通環境變數一般是無法識別的,如果在編寫的指令碼中需要使用變數,最好使用export重新宣告下該變數,
以確保指令碼正確執行。以後作為一個開發基本規範寫上。
------------------------
4)然後我在resin重啟腳本里重新定義了下環境變數,指令碼如下:
#!/bin/sh
#下面就是環境變數定義
JAVA_HOME="/opt/jdk1.6.0_18"
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:/opt/nginx-0.7.61/sbin:/opt/jdk1.6.0_18/bin:/opt/resin-3.0.25/bin:$PATH
export JAVA_HOME PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC CLASSPATH
/usr/local/bin/xxresin_stop.sh
/usr/local/bin/xxresin_start.sh

5)經過測試,定時任務此時順利重啟,在這裡非常感謝老男孩老師給與的支援。


轉載至http://blog.51cto.com/oldboy/1541515