Изменить запись cron с Ansible без изменения времени - PullRequest
1 голос
/ 03 апреля 2019

У меня есть несколько систем с заданием, запланированным Cron, которое было создано Ansible.Проверяя crontab, я вижу

#Ansible: Job Name
0 22 * * * /path/to/script.sh >/var/log/folder/script.log

Мне нужно изменить эту запись, чтобы она указала на другой скрипт.Это достаточно просто, за исключением того, что в некоторых рассматриваемых системах было изменено время, и мне нужно сохранить это время.Я попытался выполнить задание без времени:

- name: Update Cron
  cron:
    name: Job Name
    job: /path/to/new/script.sh >/var/log/folder/script.log

Но это, конечно, просто оставило следующее, поскольку каждый параметр по умолчанию имеет значение '*':

#Ansible: Job Name
* * * * * /path/to/new/script.sh >/var/log/folder/script.log

Есть ли что-то хорошее?способ заставить Ansible обновить запись в cron без прерывания текущего времени или, возможно, чистый способ прочитать это и сказать Ansible выписать текущее время?Или мне придется прибегнуть к чему-то уродливому и, вероятно, не рекомендованному, например, использовать модуль lineinfile для непосредственного редактирования соответствующих / var / spool / cron / файлов?

Ответы [ 2 ]

1 голос
/ 06 апреля 2019

Предполагая какую-то логическую группировку ваших хостов, вместо того, чтобы анализировать каждый хост для записи в crontab, можете ли вы настроить время для каждой группы, а затем настроить группы в инвентаре для установки времени с помощью модуля "cron:"?

Если вам нужно убедиться, что записи времени имеют некоторую случайность (чтобы у вас не было 500 хостов, пытающихся загрузить файл журнала в одну секунду), вы можете использовать фильтр «Случайный выбор».вместе с начальным числом, как показано в этом ответе StackOverflow: https://stackoverflow.com/a/45946949/187426

1 голос
/ 03 апреля 2019

Это будет невозможно только с модулем cron.Но я вижу способ сделать это аккуратно и получить шанс улучшить свой инвентарь одновременно.

  1. использовать модуль command с crontab -l.
  2. разборомstdout_lines, чтобы найти комментарий к имени cron, определение находится на следующей строке
  3. , проанализировать определение cron, чтобы извлечь расписание.Сохраните это в var (s)
  4. при необходимости обновите ваши host_vars в вашем инвентаре с этими значениями, чтобы у вас было расписание для следующего запуска, если необходимо
  5. запустите модуль cron с проанализированным расписанием.

Я допускаю, что для того, что обычно делается с помощью одной задачи, нужно много шагов, но это единственный чистый способ, о котором я мог подумать.

...