Ansible:仅在服务运行时重新启动服务

在Ansible手册中,我想在更新configuration文件后重新启动服务,但只有在已经运行的情况下

我不想用可靠的方式来控制服务的状态,只有在以前启动的时候才重新启动它。

我可以使用一个自定义的命令,但是它不能作为一个服务pipe理系统(upstart / systemd / sysvinit / openrc …)移植到一个完整的服务模块。

感谢您的任何提示。

configuration更新时注册一个variables。 当您检查服务是否正在运行时,注册另一个variables。 只有在两个variables都为真的情况下才能调用服

至于各种操作系统的具体情况,您可以根据主机事实进行基于家庭/分布的条件执行。

Ansible的service:模块不提供检查服务是否已经运行的机制。 因此,你将不得不通过shell: module来使用类似的东西来确定服务是否正在运行。

在这里,我正在检测WebSphere或Tomcat8是否正在运行,然后根据其状态重新启动相应的服务。

 --- # handles tomcat8 - name: is tomcat8 already running? shell: service tomcat8 status warn=false register: _svc_tomcat8 failed_when: _svc_tomcat8.rc != 0 and ("unrecognized service" not in _svc_tomcat8.stderr) ignore_errors: true - name: restart tomcat8 if running service: name=tomcat8 state=restarted when: "_svc_tomcat8.rc == 0" # handles WAS - name: is WebSphere already running? shell: service Node01_was.init status warn=false register: _svc_websphere failed_when: _svc_websphere.rc != 0 and ("unrecognized service" not in _svc_websphere.stderr) ignore_errors: true - name: restart WebSphere if running service: name=Node01_was.init state=restarted when: "_svc_websphere.rc == 0" # vim:ft=ansible: 

要仅在特定文件被更新时调用重新启动,可以使用register:在您的copy:template:任务上保存文件是否已更新的状态。 这个register:的结果register:可以作为when:一部分被合并when:service: name=XXXX state=restarted task。