Задание Ansible cron не пропускает знак процента `%`

#python #linux #bash #cron #ansible

#python #linux #bash #cron #ansible

Вопрос:

Пытаюсь создать задание cron для сбора dpkg.регистрирует и отправляет их в корзину 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 создано ошибочно.
Есть идеи?!

Ответ №1:

Попробуйте избежать обратной косой черты

 \%F