Самая странная вещь происходит с расчетом даты из-за того, что вы видите ниже; обратите внимание, что добавление одного месяца к 31 октября превращает его в декабрь! Этого не может быть? У меня та же проблема на Ubuntu 16 и 20. Эта проблема также приводит к тому, что мой скрипт оболочки выдает неправильную дату, так что это не только планировщик cron.
root@ubuntugc:/home/miuser# date -d "20210930+1 month" +%Y-%m-%d
2021-10-30
root@ubuntugc:/home/miuser# date -d "20211030+1 month" +%Y-%m-%d
2021-11-30
root@ubuntugc:/home/miuser# date -d "20211031+1 month" +%Y-%m-%d
2021-12-01
решение1
Вот как это date
работает, при сложении 1 month
он просто увеличивает месяц на один, в вашем случае 2021-11-31
это дата, которая не существует, поэтому он затем перемещает результат на один день вперед к допустимой дате ( 2021-12-01
). Отдокументация coreutils:
Неточность в единицах измерения может вызвать проблемы с относительными элементами. Например, «2020-07-31 -1 месяц» может быть оценено как 2020-07-01, поскольку 2020-06-31 — недопустимая дата. Чтобы более надежно определить предыдущий месяц, вы можете запросить месяц до 15-го числа текущего месяца. Например: