2014-09-05 23 views
2

我有這個問題在這裏回答bash - running remote script from local machine關於如何使用與sudo有關的遠程命令。我認爲這是工作,因爲我得到消息,我的服務器成功重新啓動等,所以我選擇了答案。但是今天我看到那臺服務器實際上沒有重啓,但因爲某種原因被殺。與sudo bash遠程命令不起作用

事情我做了,當我跑這個命令第一次:

ssh [email protected] -t 'sudo /etc/init.d/script restart' #or -t just after ssh, same thing 

我得到這個消息:

Restarting openerp-server: Stopping openerp-server: openerp-server. 
Starting openerp-server: openerp-server. 
Connection to host.com closed. 

所以,是的,當時我以爲一切都很好。但實際上會看到過程是否重新啓動,我看到它沒有工作。

當我試圖(以相同的命令)再次重新啓動,我得到這個消息:

Restarting openerp-server: Stopping openerp-server: start-stop-daemon: warning: failed to kill 25205: No such process 
openerp-server. 
Starting openerp-server: openerp-server. 
Connection to host.com closed. 

但是,如果使用相同的命令時,直接連接到遠程服務器,一切正常,我的腳本重新啓動服務器一般。 相同的命令我的意思是這樣的:

ssh [email protected] 
sudo /etc/init.d/script restart 

那麼到底什麼是怎麼回事?

回答

0

啓動它的腳本看起來可能會做一些頑皮的事情,它會依賴於TTY在命令返回後暫時保持活躍狀態​​。這可能是造成麻煩的直接退出。如果它啓動了一個連接到TTY內的shell的後臺作業,並在稍後分離,那麼關閉連接可能會殺死該shell並殺死它中的作業。這就可以解釋爲什麼當你重新啓動時,腳本認爲服務有一個進程號,但是卻找不到它:可能進程號被記錄在某個地方,但是在進程開始之前,進程會被關閉。

爲了確認,您可以嘗試幾件事情。遠程登錄,運行sudo命令,然後立即退出:

ssh [email protected] 
sudo /etc/init.d/script restart; exit 

,看看這立即退出也碰到了同樣的問題。

也可以嘗試

ssh [email protected] -t 'sudo /etc/init.d/script restart; sleep 30' 

,迫使它等待一下,看看是否有任何地方讓你。

+0

第一個選項確實正常運行。即使退出後它也會正常重啓。但使用睡眠定時器的第二個選項解決了它。所以我猜想使用遠程命令時,重新啓動的過程需要比實際連接到服務器的時間更長。實際上,它甚至足以放置像1秒鐘的東西,並且它正常重新啓動 – Andrius 2014-09-05 09:00:18