Я создал простую роль Ansible с целью настройки dnsmasq для целей OSX (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
Нет ли каких-либо сценариев или проблем с синхронизацией, которые могли бы привести к постоянной остановке демона? Как правильно написать такой обработчик?
Из 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
похоже, что он выполнит запуск или перезапуск, а не в устаревшем блоке ...