LINUX.ORG.RU

cron на последний день месяца

 


1

1

Хочу настроить вызов процедуры на последнее число месяца

Панель на хостинге такая https://i.ibb.co/nCksHC5/cron.jpg

Ну и как это сделать?

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

Честные ребята)


Не проще на первый день месяца?

menangen ★★★★★
()

узнать какой реально крон там стоит, и от этого плясать. Хотя можно проще, просто тупо перечислить все последние дни месяца.

anonymous
()

Cron не имеет опции «последний день месяца». В связке с ним можно запускать функцию проверки последнего дня, что-то вроде этого:

*/9 15 28-31 * * [ `date -d +'1 day' +\%d` -eq 1 ]
Prosto_user ★★★
()

Запуск в 23:00 с костылем для 28 февраля:

0 23 31 1,3,5,7,8,10,12 * myprocedure
0 23 30 4,6,9,11 * myprocedure
0 23 28 2 * [ `date -d tomorrow +%m` -eq 2 ] || myprocedure
0 23 29 2 * myprocedure
Bagrov ★★★★★
()
Ответ на: комментарий от Prosto_user

Вроде так должно работать 59 23 28-31 * * execute_this

И этот сервис https://crontab.guru/ сообщает при вводе такого варианта At 23:59 on every day-of-month from 28 through 31

То есть в результате скрипт еще должен все таки проверять не последнее ли число месяца так как его будут запускать с 28 по 31

Не красиво но что есть

mirek
() автор топика
Последнее исправление: mirek (всего исправлений: 1)
Ответ на: комментарий от mirek

Оно у тебя должно работать 28 января, 29 января, 30 января, 31 января, 28 февраля, 29 февраля (if any), 28 марта, 29 марта, 30 марта, 31 марта, 28 апреля…

Bagrov ★★★★★
()
Последнее исправление: Bagrov (всего исправлений: 1)
Ответ на: комментарий от Bagrov

Да Хотя бы так Я уже переделал скрипт

При чем в пхп все очень красиво в этом плане $task_date = new DateTime(‘now’); $task_date->modify(‘last day of this month’);

21 век - last day of this month!

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

А нельзя запустить свою программу-сервис например на питоне, которая будет считать нужное время и вызывать процедуру по наступлению времени?

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

Если уж на то пошло, то systemd и так может запускать скрипт в последний день месяца без всяких костылей.

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

$task_date = new DateTime(‘now’); $task_date->modify(‘last day of this month’);

Ну примерно это тебе написали тут

21 век - last day of this month!

Вообще-то, это давняя, ещё 20 века, традиция в юниксе - иметь возможность задавать время словами:

$ date -d '6PM last monday'
Пн 17 авг 2020 18:00:00 MSK
legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от WitcherGeralt

www.linux.org.ru/forum/talks/15859313?cid=15865831

Игнорирование и переход на личности вместо конструктива = отличная тактика. Безусловно она характеризует умного человека.

SM5T001, браво! Наконец этому жиртресту ответили в его стиле, чего наш бравый и мужественный герой-альфасамец стерпеть не смог.

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

Всмыле? Дурачок, что ли? Чел не по существу треда вообще ничего не сказал и не собирался, потому он мне и не интересен. Очевидно же. Там срач по вполне конкретному вопросу.

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

И что эта приблуда будет висеть постоянно и дублировать функционал крона ?

Мюнхгаузен: О вытаскивании себя из болота методом взятия себя за волосы головы своей же рукой и тяганием по направлению вверх

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

Не знаток Крона но можно же дёргать скрипт, в котором сделать массив последних дней [31,28,31,30,31…] и выдергивать их по текущему месяцу. При желании можно ещё сделать поправку на високосный год.

Т.е. дергаешь скрипт каждый день в 23:59, в скрипте берёшь текущий месяц из системного времени, проверяешь соответствует ли число в массиве по индексу месяца текущему числу и если да то выполняешь нужное

rukez ★★★★
()
Последнее исправление: rukez (всего исправлений: 1)
Ответ на: комментарий от rukez

Уже писал PHP last day of this month + 59 23 28-31 * * execute_this

В принципе тема решена Просто так очень плоско, что в кроне нельзя написать last day of this month

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

Просто так очень плоско, что в кроне нельзя написать last day of this month

А предпоследний день месяца ? Классическая комманда работы с датами:

date -d +-хday +%d
И всегда можно написать так:
0 23 a-b * * [ $(date -d +-хday +%d) -eq y ] && commands.sh
и получить любой день, который надо без всякой магии.

В твоём случае:

0 23 28-31 * * [ $(date -d +1day +%d) -eq 1 ] && commands.sh

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