在 OSX 目标上使用 Ansible 重新启动守护进程的正确方法是什么?

在 OSX 目标上使用 Ansible 重新启动守护进程的正确方法是什么?

我创建了一个简单的 Ansible 角色,目的是在 OSX 目标上配置 dnsmasq(dnsmasq 是从 homebrew 安装的)。

我想创建一个处理程序,当配置文件发生更改时重新启动守护进程(Ansible 1.9.3 版未实现适用于 OSX 的服务模块)。

我有一个任务:

- name: Create dnsmasq config file in /usr/local/etc/ from template
  template: src=dnsmasq.conf.j2 dest=/usr/local/etc/dnsmasq.conf
  notify:
  - restart dnsmasq

其中/Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist有一个键<key>KeepAlive</key>可以在守护进程不运行时自动启动它,因此以下处理程序会执行其工作。我可以一直依赖它吗?

- name: restart dnsmasq
  sudo: yes
  command: launchctl stop homebrew.mxcl.dnsmasq

是否存在导致守护进程永久停止的场景或时间问题?编写此类处理程序的正确方法是什么?

答案1

launchctl(1)

 stop label
          Stop the specified job by label. If a job is on-demand, launchd
          may immediately restart the job if launchd finds any criteria
          that is satisfied.

因此,我认为KeepAlive会导致守护进程重新启动,尽管该子命令在旧式子命令块,所以可能会在将来某个时候被 Apple 删除?kickstart -k看起来它会执行启动或重新启动,并且不在遗留块中……

相关内容