crontab命令是Unix/Linux中的一個常用命令,用于設置周期性被執行的指令。沒有用過的可以查一下,在運行服務端程序時會經常用到。 程序使用Java讀取一個含有中文的文件,進行處理后,將結果寫到一個結果文件中。在運行的程序時,出現了這樣一個問題:在本地環境下,運行正確;但是當使用crontab定時執行時,得到的卻是錯誤的結果。 經過一定的調研發現原來是對crontab的機制沒有弄明白導致的。crontab運行程序時,會使用它自己的環境變量,這個環境變量與你本地的環境變量可能會不同。比如,在你本地情況下,環境變量的語言為en_US.UTF-8,而在crontab中,環境變量可能是zh_CN.GBK,這樣會導致讀寫文件時——尤其是讀寫中文文件時內容編碼錯誤,進而導致結果出錯。 所以在使用Java讀寫文件時,一定要指定編碼格式,而不是使用環境變量的格式。例如下面的語句用于讀取utf-8格式的文件:
String encodeType = "utf-8";
File in_file = new File("test.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(in_file), encodeType));
網上也有關于修改crontab環境變量的方法,但是我不建議使用,因為一個系統可能是很多人共用的,修改crontab環境變量可能會引起他人程序的問題,最好修改自己的程序,保證它不依賴具體的環境變量。