2017-09-17 68 views
0

我有一個Java程序必須運行數據庫重新索引條目。這是一項必須每週進行一次的工作。 我寫了一個腳本,執行程序:腳本不能從cronjob工作

var=$(which java) 
nohup $var -Xmx2048m -jar javaProgram.jar $* -d javaProgramResource -re > /nfs/inf/app_storage/logs/service/service_refresh.log 2>&1 & 

我把Java的路徑變量的原因是becouse我希望它是通用的,我們在每個環境中的不同位置安裝了Java。 通過手動執行此腳本,它可以很好地工作。

./reindex.sh 

現在,我想創建一個執行該腳本每週一次(每週六早上6點鐘cron作業 - 這項工作的持續時間約16小時becouse有很多的數據庫中的條目)。

0 6 * * 6 cd /locattion/of/the/file; ./reindex.sh 

非但沒有在日誌文件中編輯的指標(比如當我開始手動腳本),我剛剛得到一個消息,說:

nohup: invalid option -- 'X' 
Try `nohup --help' for more information 

我想這是一個語法錯誤,但我不熟悉bash腳本和命令。

+0

嘗試在'nohup'語句之前的語句中添加'set -x',以便執行您正在執行的命令。 –

+0

大概問題是'哪個java'沒有返回任何東西。您應該引用變量替換,以便空變量不被視爲不存在。 –

+0

當我手動調用腳本時,它正在工作.. –

回答

0

我找到了一個解決方案。 在.profile文件中有腳本中需要的所有變量。 我只是將.profile文件的路徑添加到cronjob,它工作得很好。

0 6 * * 6 . $HOME/.profile; cd /locattion/of/the/file; ./reindex.sh 

現在的cronjob知道Java的路徑(becouse它寫在.profile文件)和javaProgramResource的名字,這也是對每個環境不同。 你們給了我一些非常重要的意見,我應該繼續對這個主題進行調查。謝謝!