Почему знаки процента (%) не работают в 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
,