Ответ 1
Возможно, вы ищете
0 */45 * * * *
Диапазоны здесь.
- Секунды: 0-59
- Минуты: 0-59
- Часы: 0-23
- День месяца: 1-31
- Месяцы: 0-11
- День недели: 0-6
Я использую node -cron для запуска запланированных заданий. Я хочу, чтобы задания запускались каждые 45 минут, но его поведение странно
Вот шаблон, который я использую
'00 */45 * * * *'
Я начал свой script в
Tue Jun 17 2014 08:17:39 GMT+0000 (GMT)
Вот первые несколько раз выполнение задания было выполнено
1. Tue Jun 17 2014 08:45:03 GMT+0000 (GMT)
2. Tue Jun 17 2014 09:00:01 GMT+0000 (GMT)
3. Tue Jun 17 2014 09:45:02 GMT+0000 (GMT)
Это определенно не то, что я ожидал или хотел. Все, что я хочу - запускать Работы каждые 45 минут. Может ли кто-нибудь помочь мне с шаблоном? Спасибо:)
Возможно, вы ищете
0 */45 * * * *
Диапазоны здесь.
Я больше знаком с cron, чем с node-cron, но я быстро взглянул на документацию.
Если я правильно понимаю, node-cron использует синтаксис, аналогичный тому, который используется cron, но с дополнительным полем "секунд". Итак, где может быть работа cron:
# min hour mday month wday command
*/15 * * * * some-command
чтобы запланировать запуск some-command
каждые 15 минут, узел-cron будет использовать аналогичный синтаксис для указания времени запуска:
'0 */15 * * * *'
(с дополнительным полем для указания секунд), но он выполняет указанную функцию JavaScript, а не внешнюю команду.
В стандартном cron нет синтаксиса для указания запуска задания каждые 45 минут. Спецификация 0/45 * * * *
будет запускать задание дважды в час, через 0 и 45 минут после часа. Чтобы запускать задание каждые 45 минут (в 00:00, 00:45, 01:30, 02:15,..., т.е. 32 раза в день), необходимо запланировать его выполнение каждые 15 минут, и затем вызовите скрипт, который проверяет текущее время, чтобы решить, нужно ли что-либо делать.
Или вы можете написать исчерпывающий список всех случаев, когда вы хотите, чтобы задание выполнялось:
0 0 * * * some-command
45 0 * * * some_command
30 1 * * * some_command
15 2 * * * some_command
# 28 lines omitted
Я бы определенно хотел написать скрипт для создания этого списка.
(Это выполнимо, потому что 24 часа кратны 45 минутам. Вы не можете запускать что-либо каждые 35 минут.)
Подобный подход должен работать для node-cron. Запланируйте запуск функции каждые 15 минут и вызовите функцию, которая проверяет текущее время, чтобы решить, следует ли запускать. Например, вы можете проверить, равняется ли число минут с полуночи по модулю 45 нулю. (Возможно, вы захотите учесть небольшую дисперсию в случае, если расписание не точное.)
Я недостаточно хорошо знаю JavaScript, чтобы предложить лучший способ написания этой функции, но он должен быть достаточно простым.
Или напишите 28 строк, чтобы указать, сколько раз вы хотите, чтобы он работал.
Для этого существует нет прямого пути. Однако мы можем получить результат, перехватив расписание с помощью команды оболочки в целевом script.
Сначала запустите script каждые 15 минут:
*/15 * * * * <target_script>
Затем в пределах target_script поместите следующий код перед действительными кодами:
#!/bin/sh
# Exit except at 0:45, 1:30, 2:15, 3:00, 3:45 etc
if ! echo "((`date +%-H`*60)+`date +%-M`)/45" | bc -l | grep "\.0*$" &> /dev/null;
then exit 1;
fi
# Your actual code goes here;
Вам нужно написать script в качестве обертки, чтобы решить, должна ли выполняться фактическая команда каждые 45 минут. Это 0, 45, 30 (= 45 + 45 - 60), 15 (= 30 + 45 - 60), 0 (= 15 + 45 - 60). поэтому минуты для запуска script должны быть 0,15,30,45
.
Команда date +%M
может быть полезна в оболочке script.
Я пробовал эту строку в течение 45 секунд, и она хорошо работает:
'*/45 * * * * *'
вы можете использовать node-reel
, который более читабелен, понятен и потрясающий 😉.
const reel = require('node-reel')
reel().call(() => {
console.log(Date.now());
}).everyFortyFiveMinutes().run()
использовать cron npm moduel что-то вроде этого
var cronJob = require('cron').CronJob;
var job = new cronJob({
cronTime:'0 */45 * * * *',
onTick: function(){
var my_date = new Date();
var tomorrow_date = my_date.getFullYear() + "-" + ('0'+(my_date.getMonth()+1)) + "-" + (my_date.getDate()+1)
var condition = [{},{$set: {'plannedDeliveryDate' :tomorrow_date +'T00:00:00.000Z'}}]
dbQuery.updateMany(orderModel, condition, function(err, result){
if(result.nModified == result.n) console.log(err, result)
})
},
start:true,
timeZone:'Asia/Kolkata'
});
job.start();
Вы можете обратиться к cronr, он поддерживает все шаблоны макросов и предоставляет онлайн-демонстрацию cronr - онлайн-демонстрацию
Просто попробуйте это,
0-23/45 * * * *