Недавно я написал простой небольшой скрипт для резервного копирования каталога на S3. Моя цель - запускать ежедневные, еженедельные и ежемесячные резервные копии с разными правилами хранения в зависимости от частоты в S3.
Все работает неплохо, за одним исключением. Мое ЕЖЕНЕДЕЛЬНОЕ задание cron выполняется каждый день. Вот crontab:
0 3 1 * * /usr/s3_sync_dir /dropbox MONTHLY
0 2 2-31 * THU /usr/s3_sync_dir /dropbox WEEKLY
0 3 2-31 * * /usr/s3_sync_dir /dropbox DAILY
Таким образом, ЕЖЕМЕСЯЧНАЯ работа запускается в 3 часа ночи 1 числа каждого месяца. ЕЖЕНЕДЕЛЬНЫЙ затем должен идти по четвергам в 2 часа ночи, если это не первое. И DAILY запускается каждый день, а не первый. это онлайн-валидатор подтверждает что ЕЖЕНЕДЕЛЬНАЯ должна проходить каждый четверг.
У кого-нибудь есть мысли, почему моя ЕЖЕНЕДЕЛЬНАЯ работа выполняется каждое утро?
Это на Ubuntu 16.04.2 LTS.
Из руководства (man 5 crontab)
Примечание. День выполнения команды можно указать в двух полях - день месяца и день недели. Если оба поля ограничены (т. Е. Не *), команда будет запущена, когда одно из полей соответствует текущему времени. Например, `` 30 4 1,15 * 5 '' вызовет выполнение команды в 4:30 1-го и 15-го числа.
каждый месяц плюс каждую пятницу. Однако можно достичь желаемого результата, добавив к команде тест (см. Последний пример в ПРИМЕРЕ CRON FILE ниже).
Думаю, тебе стоит превратить свои 2-31 в *
ИЛИ
вы можете использовать @daily, @weekly и @monthly.
ИЛИ
вы можете ссылаться на свои скрипты в /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly.