Intereting Posts
Маршрут SSH для размещения через интерфейс Является ли разумным подход к «резервному копированию» переменной $ IFS? Как изменить приглашение в Linux? Как завершить работу компьютера после завершения задачи? Создать ISO-образ типа ext3 файловая система / каталог объединяет точки монтирования в качестве слоев Crontab: переменные в полях даты / времени файл журнала для хранения выходов на stdout и stderr не создается crc8 undefined при компиляции модуля ядра Linux на Beaglebone black / Debian Есть ли плагин меню файла для vim (а не gVim), который создает текстовую систему меню графического интерфейса? Возврат оболочки каждого пользователя по умолчанию Захват нового файла с помощью старого имени Каковы преимущества использования OmniOS, чем SmartOS или OpenIndiana? Почему выдача одной и той же команды создает больше выходных данных в tty, чем в pts / gnome-terminal? PPTP с dhcp только для клиентов

сломанное задание cron после его редактирования

У меня возникли трудности с пониманием того, почему следующая cronjob больше не работает:

30 3 * * * /path/to/backup_script.sh && tar -czvf /path/to/archived/backups/retain_last_3_backups/backup-community_$(date '+%Y%m%dT%H%M%S').tar.gz -C /path/to/source/backup/folder/ . 

Если я запускаю его вручную, используя того же пользователя, который владеет crontab, он работает. Он перестал работать, когда я отредактировал его пару дней назад, добавив && tar -czvf [...]

Должен ли я другим способом date команду date ? или избежать $ (я собираюсь проверить это сейчас, просто заметил это)?

Благодаря David Sánchez Martín, я нашел конкретный журнал, он сообщает о следующей ошибке:

 /bin/sh: 1: Syntax error: Unterminated quoted string 

Символы % являются особыми в записи crontab , поэтому вы не можете использовать их непосредственно в строке формата date .

man 5 crontab пишет

Шестое поле (остальная часть строки) указывает команду для запуска. Вся командная часть строки, вплоть до символа новой строки или % , будет выполнена /bin/sh или оболочкой, указанной в переменной SHELL файла cron. Процентные знаки ( % ) в команде, если не сбрасываются с помощью обратного слэша ( \ ), будут изменены на символы новой строки, а все данные после первого % будут отправлены команде в качестве стандартного ввода.

Во-первых, для отладки и мониторинга этого, как правило, добавьте переменную MAILTO в crontab, если проблема возникнет в стандартной ошибке, она отправит вам электронное письмо.

 # crontab -e MAILTO=mymail@mydomain.com 30 3 * * * /usr/local/bin/blahblah.sh 

Также обратите внимание, если команда выдает что-то в стандартном выводе, вы можете перенаправить его на нуль, если вы не хотите этого в своей почте.

 30 3 * * * /usr/local/bin/blahblah.sh > /dev/null 

Тогда, возможно, если вы не уверены в команде, добавьте дату в переменную, например

 30 3 * * * /path/to/backup_script.sh && THEDATE=$(date +%Y%m%dT%H%M%S) tar -czvf /path/to/archived/backups/retain_last_3_backups/backup-community_$THEDATE).tar.gz -C /path/to/source/backup/folder/ . 

Я думаю, это более читаемо, и у вас нет переменной, скрывающейся вокруг.