Я знаю, как проверить, доступна ли определенная строка в файле, используя приведенную ниже задачу, но я не уверен, как непрерывно проверять или выполнять поиск файла, пока не появится указанная строка, и выйти из задачи. (-= SERVICE HAS BEGUN =- )
- name: Check whether my.log contains "SERVICE HAS BEGUN"
command: grep -Fxq "-= SERVICE HAS BEGUN =-" my.log
register: logg
check_mode: no
ignore_errors: yes
changed_when: no
Я наткнулся на опцию wait_for, но это действительно не помогает. Любые предложения, пожалуйста
Вы можете что-то сделать, используя until
петля, например:
- name: Check whether my.log contains "SERVICE HAS BEGUN"
command: grep -Fxq -- "-= SERVICE HAS BEGUN =-" my.log
register: logg
ignore_errors: true
changed_when: false
until: logg.rc == 0
retries: 60
delay: 2
Это повторит попытку в течение примерно 2 минут (60 раз с 2-секундной задержкой между попытками).
Обратите внимание, что мне пришлось изменить вашу команду grep
, потому что в противном случае начальный -
в вашей строке поиска заставил бы grep
интерпретировать это как параметр командной строки.
Если вы хотите использовать wait_for, вы можете — он может дождаться появления регулярного выражения в файле:
- name: Wait until SERVICE HAS BEGUN
wait_for:
path: /path/to/my.log
search_regex: SERVICE HAS BEGUN
Вам определенно следует добавить сюда некоторые значения тайм-аута — проверьте документы, чтобы узнать, какие значения по умолчанию, и установите что-то подходящее для вашего варианта использования.
Приятно знать альтернативный подход :) Спасибо