2017-10-17 204 views
7

我有一個過程,我想盡快開始我的系統是rebooted無論如何,所以我使用upstart腳本,但有時我注意到我的過程沒有啓動在硬重啓(插拔和啓動機器),所以我認爲我的新貴腳本在硬重啓後沒有被踢入。我相信硬重啓沒有運行級別。如何調試間歇性失敗的新貴腳本?

我很困惑,爲什麼有時在重新啓動它的工作,但有時它不起作用。我該如何調試呢?

下面是我的新貴腳本:

# sudo start helper 
# sudo stop helper 
# sudo status helper 
start on runlevel [2345] 
stop on runlevel [!2345] 

chdir /data 
respawn 

pre-start script 
    echo "[`date`] Agent Starting" >> /data/agent.log 
    sleep 30 
end script 

post-stop script 
    echo "[`date`] Agent Stopping" >> /data/agent.log 
    sleep 30 
end script 

limit core unlimited unlimited 
limit nofile 100000 100000 
setuid goldy 
exec python helper.py 

有什麼方法來調試這一點發生了什麼?我可以很容易地重現這一點我相信。我可以在這裏做什麼指針?

注:

在重啓有時我看到,我在pre-start腳本,但有時我沒有看到日誌重啓後所有,這意味着我的暴發戶腳本不觸發記錄。有什麼我需要改變運行級別,使其工作?

我有一個運行在虛擬機管理程序中的虛擬機,我正在使用Ubuntu。

+1

你可能會暫時的東西,如更換你的'EXEC蟒蛇helper.py':''script' EXEC 2 >>/path/to/log.txt''set -x' exec python helper.py'' end script';這樣你就可以在'/ path/to/log.txt'中記錄啓動過程中發生的事情。 –

+0

您可以檢查'/ var/log/upstart'並查看是否有您需要的東西? –

+0

已經檢查過,我相信沒有什麼。 – john

回答

1

您的進程運行良好,但在系統啓動期間,許多事情會並行進行。

如果安裝(使可用的/data文件夾)運行晚於您的pre-start script,您將看不到pre-start script的「結果」。

我建議移動睡眠30較早(順便說一句30秒似乎過於looong):

pre-start script 
    sleep 30 # sleep 10 should be enough 
    echo "[`date`] Agent Starting" >> /data/agent.log 
end script 
+0

ok會試試這個,但是有沒有其他的runlevel可以使用,這將保證在每一個其他的upstart腳本運行後運行我的upstart腳本(如mount) ? – john

+0

如果你想確保你的腳本在mount之後運行 - 更具體地說在本地掛載之後, 輸入 '在本地文件系統上啓動' - 運行時間比'runlevel啓動晚'' –

+0

ok我試着移動睡在上面,但它仍然不能很好地工作,所以我不得不手動啓動它。但是我注意到的是,如果我使用'start stop rc'而不是我原來的'start'行,那麼它總是按照我的測試工作。你知道我的新變化有什麼不同嗎? – john