我创建了一个简单的 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
看起来它会执行启动或重新启动,并且不在遗留块中……