啟動另一個服務後執行一個服務

啟動另一個服務後執行一個服務

我已經安裝了 MySQL NDB 叢集。叢集節點之間的資料庫同步大約需要 2-3 分鐘。一旦同步完成,我就可以啟動另一個名為 heartbeat 的應用程式。因此,在我的 shell 腳本中,我想始終檢查 ndbd 服務的可用性。一旦該服務可用,我需要在五分鐘內啟動心跳應用程式。你能幫我寫劇本嗎?

答案1

您也可以嘗試使用“wait”bash 內建指令。

來自“男人狂歡”

等待[n]

等待指定的進程並返回其終止狀態。 n 可以是進程 ID 或作業規格;如果給出了作業規範,則等待該作業管道中的所有進程。如果未給予 n,則等待所有目前活動的子進程,且傳回狀態為零。如果n指定不存在的進程或作業,則傳回狀態為127。

您的腳本可能如下所示:

# send to background
./ndb_startup_script & 

# wait on pid of ndb_startup_script
wait $!

if [ $? -eq 0 ] # assuming 0 is ret code for successful run
then 
    ./heartbeat_startup_script
else 
    # extra stuff to handle error
fi

答案2

我要做的是讓 ndb 腳本執行另一個腳本,這樣它就不會等待 5 分鐘完成並阻止其他服務啟動。

## whatever starts ndb
exec heartbeat_startup_script

我在這裡設定了睡眠 300(秒),因為您指定了 5 分鐘,但檢查 ndb 同步是否完成會更好。

##heartbeat_startup_script
sleep 300
heartbeat

相關內容