Попытка создать задание cron для сбора dpkg.logs и отправки их в корзину s3.
Задача выполняется следующим образом:
- name: Configure cron job to export patch logs
cron:
name: export patch logs daily
minute: 0
hour: 0
user: root
cron_file: patch_logs
job: "/usr/local/bin/aws s3 cp /var/log/dpkg.log s3://'{{ patch_logs_bucket }}'/dpkg.log.$(hostname).$(date +\%F)"
Но, как описано в man crontab, знак процента должен быть экранирован. Вот почему вы видите обратную косую черту перед знаком процента.
man (5) crontab:
Percent-signs (%) in the command, unless escaped with backslash (\),
will be changed into newline characters, and all data after the
first % will be sent to the command as standard input.
Проблема в том, что Ansible не может выполнить задачу:
--> Action: 'converge'
ERROR! Syntax Error while loading YAML.
found unknown escape character '%'
The error appears to have been in '/Users/<user>/<directory>/<to>/<ansible_project>/tasks/base.yml': line 132, column 115, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
cron_file: patch_logs
job: "/usr/local/bin/aws s3 cp /var/log/dpkg.log s3://'{{ patch_logs_bucket }}'/dpkg.log.$(hostname).$(date +\%F)"
^ here
We could be wrong, but this one looks like it might be an issue with
missing quotes. Always quote template expression brackets when they
start a value. For instance:
with_items:
- {{ foo }}
Should be written as:
with_items:
- "{{ foo }}"
Я пытался игнорировать экранирование процентов и просто оставить его как $(date +%F)
, но задание cron создано неправильно.
Есть идеи?!