2011-06-03 125 views
2

我有一個.sh腳本,粘貼了許多其他腳本,由jsch ChannelExec從Windows應用程序調用。jsch ChannelExec使用nohup運行.sh腳本「丟失」一些命令

Channel channel = session.openChannel("exec"); 

((ChannelExec) channel).setCommand("/foo/bar/foobar.sh"); 

channel.connect(); 

,如果我喜歡運行命令「的nohup /foo/bar/foobar.sh >> /path/to/foo.log &」,所有的長期工作(數據庫操作,文件處理等)似乎迷路了。

檢查日誌文件,只發現那些回聲的東西(長期操作前後,計算運行時間等)。

我檢查了權限,$ PATH,添加源/ etc/profile到我的.sh,但沒有任何這些作品。

但是當我正常運行命令(同步運行,打印所有回聲輸出到我的Windows客戶端),所有的事情都順利。

這是一個非常具體的概率。 希望有經驗的人能幫助我。

提前致謝。

+0

你確定它們會迷路嗎?或者當你檢查輸出時,它們是否還在運行? – 2011-06-03 11:28:54

+0

此外,嘗試與股票'ssh'客戶端相同,以查看它是否與JSch(我想不)。 – 2011-06-03 11:30:24

+0

嗨。我可以確保他們迷路了。如果他們工作,一些記錄應該被加載到數據庫中。 – 2011-06-04 09:17:24

回答

6

解決!

一個不同的問題,往往在 出現這種情況是SSH拒絕 註銷(「掛起」),因爲它拒絕 從/到 後臺作業(一個或多個)丟失任何數據。 [6] [7]這個問題 也可以通過重定向 所有三個I/O流來克服。

http://en.wikipedia.org/wiki/Nohup

我的概率是,PSQL和pg_bulkload打印它們的輸出犯錯流。

在我的腳本中,我沒有重定向err流。

通過將err流重定向到相同的日誌文件,一切都很順利。

nohup foo.sh > log.log 2>&1 & 

感謝Atsuhiko山中,他創造了一個偉大JSch library,和Paulo Ebermann爲documentation

+0

'nohup foo.sh> log.log 2>&1&'救了我一整天! – LoranceChen 2018-02-17 11:43:56