Как вставить cronjobs с использованием bash без оценки команды? - PullRequest
0 голосов
/ 05 мая 2020

Я использую bash oneliner для создания задания cron, которое сохраняет файлы по пути, который зависит от текущего времени, поэтому я использую date. Однако выражение date вычисляется, когда я вставляю задание cron, в то время как я хочу, чтобы выражение date оценивалось, когда cron запускает задание.

Моя команда выглядит так:

bash -c "(crontab -r; echo \"* * * * * /usr/bin/wget -o /backups/\$(date +\%F_\%R).sql 127.0.0.1:8000/api/export/full\") | crontab -"

Как я могу изменить эту команду, чтобы добиться этого?

Ответы [ 2 ]

3 голосов
/ 05 мая 2020

Поместите аргумент echo в одинарные кавычки, а не в двойные кавычки, чтобы внутри него не было никакой оценки $(...).

Также нет необходимости включать crontab -r в команда, передаваемая по конвейеру crontab -.

bash -c "crontab -r; echo '* * * * * /usr/bin/wget -o /backups/\$(date +\%F_\%R).sql 127.0.0.1:8000/api/export/full' | crontab -"
0 голосов
/ 05 мая 2020

Используйте одинарные кавычки вместо двойных кавычек. Bash не выполняет раскрытие переменных в строках с одинарными кавычками. Вы можете использовать одинарные кавычки для внутренней строки (аргумент для эха) или для внешней (а затем использовать неэкранированные двойные кавычки для внутренней)

...