2012-09-26 56 views
1

我的應用程序由4個獨特的進程組成。對於HA原因,我將啓動每個進程的3個實例,每個進程的2個實例將在單個Linux主機上運行,​​另一個在另一個Linux主機上運行。 我想寫一個監視腳本(bash腳本),它會定期輪詢這些進程。我的主要挑戰是,編寫一個與主機名和進程名相關的腳本聽起來很不方便。例如,我不想編寫一個腳本,它監視linux上的IP地址爲A和進程A-3的Linux主機上的進程A-1,進程B-1,進程A-2,進程B-2 IP主機地址B.如何監視linux上的各種進程

編寫獨立於主機名和進程名的監視腳本的一種方法是,當這些進程中的每個啓動時,它們都會創建一個互斥量名稱。例如,process-A-1將創建一個名爲mutex.process-A-1的互斥體,並且process-A-2將創建一個名爲mutex.process-A-2的互斥體。然後,腳本所要做的就是在名爲mutex.process-A *的系統上尋找互斥體。然後腳本可以使用ps命令來檢查這些處理是否正在運行。

我的問題是,耦合互斥名稱好嗎?有沒有解決這個問題的另一種方法在Linux上?

+0

你不能只使用init/upstart/systemd來保持你的進程運行嗎? – tMC

+0

接下來的問題是跟蹤每臺服務器上部署的組件數量。例如,安裝了10個進程,因此需要在服務器A上監控10個進程。4安裝了進程,因此需要監控4個進程。如果是tommorow,我將它們交換,現在還需要修改腳本。 – Jimm

+0

也許一些老學校:你也可以讓你的進程監聽USR1或其他任何信號,並讓他們在預定文件中記錄某些內容或者與日誌進程交談(如syslogd)。然後,您會知道它們是否在運行,並且還會獲得一些很好的狀態報告。您可以將信號發送給所有給定的名稱,或者在啓動過程時使用存儲的pid進行處理。 – opaque

回答

1

我會親自寫它在後臺運行所有這些進程,那麼你可以打電話給他們後直接存儲它們的PID,存儲process1_pid=$!您使用監測這些PID的發前後每一個到後臺,然後觸發另一個腳本bash腳本。

獲得PID的其他方法是使用jobs命令,該命令將列出您已設置爲背景的所有作業,jobs -p將列出您在背景上具有的所有PID。您還可以利用工作來了解他們是否仍在運行。

http://www.gnu.org/software/bash/manual/bashref.html#Job-Control

我會從那裏開始,如果是更復雜,正在從其他地方創造的過程,你可以隨時使用特定的用戶來運行所有這些,使用ps -u用戶過濾它們。