2016-12-07 22 views
0

我正在努力使用ansible-playbook來部署微服務。並且所有微服務都使用java -jar命令進行部署。現在我正在嘗試編寫一個可靠的手冊,以在部署其他Java程序之前查找並殺死依賴的java -jar進程。Ansible playbook查找特定的java進程並殺死

我在這裏沒有想法了。我正在考慮在init.d中爲java deamon創建一個腳本。但是,如果我這樣做並停止服務,它會停止所有我不想要的java進程。

輸出爲ps -ef | grep java

28330 1 1 13時52? 00:00:56 java -jar -DCONFIG_FOLDER =/opt/app/microservices/deploy/dal-core/config /opt/app/microservices/deploy/dal-core/enrollment-vehicle-dal-core-0.0.1 -SNAPSHOT.jar

root 29143 1 2 14:22? 00:00:49 java -jar -DCONFIG_FOLDER =/opt/app/microservices/deploy/dal-core/config /opt/app/microservices/deploy/dal-core/enrollment-vehicle-listener-0.0.1-SNAPSHOT .jar

root 29879 1 2 14:23? 00:00:48 java -jar -DCONFIG_FOLDER =/opt/app/microservices/deploy/dal-core/config /opt/app/microservices/deploy/dal-core/enrollment-account-dal-core-0.0.1 -SNAPSHOT.jar

root 31093 1 3 14:28? 00:01:04 java -jar -DCONFIG_FOLDER =/opt/app/microservices/deploy/listener/config /opt/app/microservices/deploy/listener/enrollment-account-listener-0.0.1-SNAPSHOT.jar

的asadmin 31208 18879 0 14:57分/ 1 00:00:00 grep的--color =汽車的Java

在上述情況下,如果我碰巧也再次部署招生賬戶-DAL核心,我應該先殺死註冊帳號監聽器(pid:31093),然後註冊帳號-dal-core(pid:29879)。

我對所有的微服務都有一個劇本,所以我也無法對它進行硬編碼。

回答

0

我不確定,但我希望pattern參數service模塊能解決您的問題。你可以找到文件here。我覺得你的Ansible任務看起來像這樣的代碼:

- name: Killing enrollment-account-listener 
    service: 
    name: enrollment-account-listener 
    state: stopped 
    pattern: enrollment-account-listener 

文件說,如果與給定的名稱服務不響應服務狀態的命令,然後在ps命令輸出發現pattern。如果找到該字符串,則該服務將被假定爲正在運行。

如果它不起作用,您仍然可以使用commandshell模塊來找到解決此問題的方法。

+0

謝謝您的反饋32c​​upo。對不起,我沒有機會使用劇本模塊,但它看起來很完美。是的,我使用了shell模塊來解決問題。就像這樣:「kill $(ps aux | grep -i'enrollment-account'| awk'{print $ 2}')」...........這個命令會grep字符串「enrollment-account」,並終止進程ID :)。 – Manjil