Почему знаки процента (%) не работают в crontab?

Я записываю файлы в журнал, запускаемый скриптом bash, используя cron. Вызов cron выглядит так:

*/25 * * * * bash script.sh > "/var/log/$(date +%Y-%m-%d_%H:%M).log"

Но когда я проверяю crontab, он записывает как

*/25 * * * * bash script.sh > "/var/log/$(date +).log"

И это никогда не пишет файл журнала. Есть ли что-то, что мне нужно изменить, чтобы cron написал дату?

1 ответ

Это вопрос экранирования переменных:

* * * * * /usr/bin/touch /tmp/$(date +\%Y:\%m).log
#                                      ^   ^

работал для меня.

От man 5 crontab:

Знаки процента (%) в команде, если они не экранированы обратной косой чертой (\), будут заменены символами новой строки, и все данные после первого% будут отправлены команде в качестве стандартного ввода.

Так

*/25 * * * * /bin/bash script.sh > "/var/log/$(date +\%Y-\%m-\%d_\%H:\%M).log"
#                                                    ^    ^   ^   ^   ^

должно сработать.

Обратите внимание, я использовал /bin/bash вместо просто bash ,

Другие вопросы по тегам