2012-05-04 147 views
0

我使用open jdk和crontab運行Ubuntu 10.10。我做了一個整潔的小Java應用程序,它可以做一些很酷的事情,並將它作爲可運行的jar文件導出。我可以從命令行運行它,但我需要每天運行一次文件。所以我寫了一個cron作業來運行一個實際上會調用jar文件的shell腳本。 shell腳本在單獨運行時工作正常,它看起來像這樣:crontab運行jar文件時出錯

#!/bin/sh 
/usr/bin/java -jar /root/proj/CoolStuff.jar 

完美地工作。所以我說這到crontab:

23 14 * * * /root/proj/runScript.sh > /root/proj/log.txt 2>&1 

這並不完美運行。事實上,它沒有運行。 log.txt會出來說「錯誤」。漂亮不倫不類,對吧?我檢查了我的環境變量,沒有什麼奇特的。還有什麼我可能會失蹤?有關從哪裏出發的任何想法?有什麼辦法可以輕鬆運行這個腳本嗎?

回答

0

檢查該文件的執行權限。

的cron是有不同的權限運行,而不是在登錄時,你得到了一個。

而且您嘗試訪問/根。 嘗試將您的腳本重定位到另一個「非root」目錄。

+0

我最初的所有文件都在非root目錄下,但是我正在從root的crontab運行這些腳本。此外,有關文件的所有權限均爲777。 – user850275

+0

好吧,使用root crontab一切都應該正常工作。 :( – cb0

+0

大聲笑,我知道吧?;) – user850275

0

通過註釋掉當前的/usr/bin/java ..並在線上插入set來查看您的crontab環境。

現在從您的命令行執行set > tmpEnvVarList.txt並與您在log.txt中看到的內容進行比較。

幾乎可以肯定的是,你的.profile或.bash_rc(或其他)正在設置crontab不可用的env vars。你需要添加. .profile等你的腳本。

cbO的想法也不錯。

我希望這會有所幫助。

+0

這似乎將是解決方案。它會像導出cron環境中不存在的所有環境變量一樣簡單嗎?我實際上是在出口PATH變量,但我沒有在上面顯示它。 – user850275

+1

請做實驗,看看結果是什麼。我會試圖找出加入哪個'。 $ HOME/.profile,。 $ HOME/.bash_rc'等可以解決這個問題。然後,您的代碼將適應您對環境所做的任何更改。另外,你是腳本的頭文件,說'#!/ bin/sh'。你在Linux或UNIX?如果是linux,爲什麼不用'#!/ bin/bash'。祝你好運。 – shellter

+0

我加了'。 .profile'到腳本並捕獲cron作業的輸出。我得到'stdin:不是tty'現在跟着手動執行腳本後收到的環境變量比我少... – user850275