我正在努力使用ansible-playbook部署微服务。并且所有微服务都使用java -jar
命令进行部署。现在我正在尝试编写一个ansible playbook来查找并杀死依赖的java -jar进程,然后再部署其他进程。
我这里的想法已经不多了。我正在考虑在init.d中为java deamon创建一个脚本。但是,如果我这样做并停止服务,它将停止我不想要的所有java进程。
输出 ps -ef | grep java
root 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 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 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 pts / 1 00:00:00 grep --color = auto java
在上面的场景中,如果我发生了再次部署enrollment-account-dal-core,我应该首先杀死enrollment-account-listener(pid:31093)然后注册account-account-dal-core(pid:29879)
我有一个适用于所有微服务的手册,所以我也无法对其进行硬编码。
答案 0 :(得分:0)
我不确定,但我希望pattern
模块中的service
参数可以解决您的问题。您可以找到文档here。我认为你的Ansible任务看起来像这个代码:
- name: Killing enrollment-account-listener
service:
name: enrollment-account-listener
state: stopped
pattern: enrollment-account-listener
文档说,如果具有给定名称的服务不响应服务状态命令,则在ps命令的输出中找到pattern
。如果找到该字符串,则假定该服务正在运行。
如果它不起作用,您仍然可以使用command
或shell
模块来解决此问题。