LINUX.ORG.RU

Ошибка при выполнении манипуляций над date

 ,


0

1

Добрый день, есть скрипт, в котором одним из условий стоит выполнение в последнее воскресенье месяца. Писал в debian, накидал такую конструкцию:

date -d @$(( $(date -d $(date -d @$(( $(date +%s) + 2678400 )) +%Y%m01) +%s) - 604800 )) +%Y%m%d

В debian возвращает 25 декабря 2016 года, а в ESXI 10 августа 2017 года. Начал делать пошагово, и ошибка обнаружилась при выполнении вот этого

date -d $(date -d @$(( $(date +%s) + 2678400 )) +%Y%m01) +%s

Debian возвращает 1483203600, а ESXI 1502931660.

Кто может подсказать в чем может быть проблема? Или может знает более простой способ найти последнее воскресенье

Или может знает более простой способ найти последнее воскресенье

почитать мануал пробовал?

% date -v1d -v+1m -v-1d -v-sun
Sun Dec 25 15:39:28 SAMT 2016
% date -v1d -v+1m -v-1d -v-sun +%Y%m%d
20161225

anonymous
()
Ответ на: комментарий от nspickiy

ага, поторопился я, у меня FreeBSD, и ваша команда тоже не работает :)

покопайтесь в исходниках date в FreeBSD, посмотрите как там вычисляется.

anonymous
()
Ответ на: комментарий от anonymous

Мне нужно в esxi, а там всё очень сильно порезано. к примеру нельзя сделать +1 week, он не умеет такое интерпретировать. Из-за этого все сложности

nspickiy
() автор топика

а cron'а тем нет? поставил бы на запуск в воскресенье, а в самом скрипте проверять что оно последнее, иначе просто выход.

anonymous
()
Ответ на: комментарий от nspickiy

1) Судя по всему, в ESXi стоит busybox, у которого распознавание даты в -d другое, с date из GNU coreutils совместим только вариант 'YYYY-MM-DD hh:mm[:ss]'. Вообще же -d не posix и не стандартизован нигде, даже внутри GNU. (%s тоже GNU-расширение).
2) Это неважно, потому что твоё выражение некорректно по крайней мере в двух местах:
Во-первых, это не «последнее воскресенье текущего месяца», а «день, на неделю предшествующий первому числу следующего месяца». Или ты собирался дальше от него искать через %u или %w?
Во вторых, 31 марта + 31 день это уже не апрель, а май (не говоря уж о последних числах января).
3) Проверить, является ли текущий день последним воскресеньем несколько проще, чем вычислять дату этого последнего.

ABW ★★★★★
()
Ответ на: комментарий от nspickiy

Поставь FreeBSD в esxi, а скрипт запускай любым удалённым способом — ssh,rsh, etc.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.