Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Языки программирования
  4. JavaScript
  5. Как сделать рабочие часы для скрипта

Как сделать рабочие часы для скрипта

Запланировано Прикреплена Закрыта Перенесена JavaScript
javascript
15 Сообщения 5 Постеры 140 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • LinusL Не в сети
    LinusL Не в сети
    Linus
    написал в отредактировано
    #5

    js это все конечно весело, но каждый инструмент нужен для своего, вот вариант на crontab, оно будет и легче по ресурсам.

    * 8-17 * * * /usr/bin/node /path/to/script.js >> /var/log/myjob.log 2>&1
    
    1 ответ Последний ответ
    5
    • MugiwaraM Не в сети
      MugiwaraM Не в сети
      Mugiwara
      написал в отредактировано
      #6

      можно перезапускать по крону или по pm2 скрипт (pm2 будет каждый раз перезапускаться после завершения при стандартных настройках)
      а проверку можно сделать еще и в скрипте

      const now = new Date();
      const hour = now.getHours();
      
      if (hour < 8 || hour > 17) {
        process.exit(0);
      }
      
      // тут ваша логика
      
      hannadevH 1 ответ Последний ответ
      👍
      3
      • MugiwaraM Mugiwara

        Пользователь @hannadev написал в Как сделать рабочие часы для скрипта:

        function workingHours(data = Date ()) {
        const hour = data.getHours();
        return hour >= 8 && hour < 17;
        }

        мне кажется код не рабочий, ты его запускала? у data должен быть новый экземпляр new Date()

        hannadevH Не в сети
        hannadevH Не в сети
        hannadev
        написал в отредактировано
        #7

        @Mugiwara Поправила!!!

        1 ответ Последний ответ
        2
        • LinusL Linus

          и как можно называть переменную, которая отвечает за дату - data а не date?

          hannadevH Не в сети
          hannadevH Не в сети
          hannadev
          написал в отредактировано
          #8

          @Linus Вы чего напали то людоеды блин… 😧

          1 ответ Последний ответ
          1
          • MugiwaraM Mugiwara

            можно перезапускать по крону или по pm2 скрипт (pm2 будет каждый раз перезапускаться после завершения при стандартных настройках)
            а проверку можно сделать еще и в скрипте

            const now = new Date();
            const hour = now.getHours();
            
            if (hour < 8 || hour > 17) {
              process.exit(0);
            }
            
            // тут ваша логика
            
            hannadevH Не в сети
            hannadevH Не в сети
            hannadev
            написал в отредактировано
            #9

            @Mugiwara Вот эта нормальная тема, а как в pm2 настроить такое то?

            MugiwaraM 1 ответ Последний ответ
            2
            • hannadevH hannadev

              @Mugiwara Вот эта нормальная тема, а как в pm2 настроить такое то?

              MugiwaraM Не в сети
              MugiwaraM Не в сети
              Mugiwara
              написал в отредактировано Mugiwara
              #10

              @hannadev
              пример скрипта который выполняет что-то

              // script.js
              async function main() {
                  console.log(`[${new Date().toISOString()}] Запуск скрипта через PM2`);
                  
                  // Эмуляция работы
                  await new Promise(r => setTimeout(r, 2000)); 
                  console.log('Работа выполнена.');
              
                  // ОБЯЗАТЕЛЬНО: завершаем процесс, чтобы PM2 не перезапускал его мгновенно,
                  // а ждал следующего тика Cron.
                  process.exit(0);
              }
              
              main();
              

              вот команда pm2 где 30 - количество минут которое он ждет до следующего рестарта, нужно указать не меньше минут чем время выполнения скрипта( его бы надо примерно знгать)

              pm2 start script.js --cron "*/30 8-17 * * *" --no-autorestart
              

              еще момент: pm2 работает так, что если выйдет ошибка - то скрипт сразу перезапускается

              kirilljsxK 1 ответ Последний ответ
              4
              • MugiwaraM Mugiwara

                @hannadev
                пример скрипта который выполняет что-то

                // script.js
                async function main() {
                    console.log(`[${new Date().toISOString()}] Запуск скрипта через PM2`);
                    
                    // Эмуляция работы
                    await new Promise(r => setTimeout(r, 2000)); 
                    console.log('Работа выполнена.');
                
                    // ОБЯЗАТЕЛЬНО: завершаем процесс, чтобы PM2 не перезапускал его мгновенно,
                    // а ждал следующего тика Cron.
                    process.exit(0);
                }
                
                main();
                

                вот команда pm2 где 30 - количество минут которое он ждет до следующего рестарта, нужно указать не меньше минут чем время выполнения скрипта( его бы надо примерно знгать)

                pm2 start script.js --cron "*/30 8-17 * * *" --no-autorestart
                

                еще момент: pm2 работает так, что если выйдет ошибка - то скрипт сразу перезапускается

                kirilljsxK Не в сети
                kirilljsxK Не в сети
                kirilljsx
                js
                написал в отредактировано
                #11

                @Mugiwara То есть хочешь сказать отпадает смысл вообще в setInterval() ?

                MugiwaraM 1 ответ Последний ответ
                1
                • kirilljsxK kirilljsx

                  @Mugiwara То есть хочешь сказать отпадает смысл вообще в setInterval() ?

                  MugiwaraM Не в сети
                  MugiwaraM Не в сети
                  Mugiwara
                  написал в отредактировано Mugiwara
                  #12

                  @kirilljsx Сначала надо понять какая цель у интервала, можно и без него перезапускать скрипт после завершения через pm2, я же привел пример, когда надо задать именно интервал? а так каждый газует как хочет, вон, предложили кронтаб использовать, самый простой и производительный вариант.

                  Но если ты скрипт будет все равно на pm2 вешать, что скорее всего так и произойдет, то удобнее его интегрировать сразу. А если без pm2, то тебе еще ошибки ловить, как-то перезапускать если что-то не так

                  kirilljsxK 1 ответ Последний ответ
                  4
                  • MugiwaraM Mugiwara

                    @kirilljsx Сначала надо понять какая цель у интервала, можно и без него перезапускать скрипт после завершения через pm2, я же привел пример, когда надо задать именно интервал? а так каждый газует как хочет, вон, предложили кронтаб использовать, самый простой и производительный вариант.

                    Но если ты скрипт будет все равно на pm2 вешать, что скорее всего так и произойдет, то удобнее его интегрировать сразу. А если без pm2, то тебе еще ошибки ловить, как-то перезапускать если что-то не так

                    kirilljsxK Не в сети
                    kirilljsxK Не в сети
                    kirilljsx
                    js
                    написал в отредактировано
                    #13

                    @Mugiwara А вот как раз напрашивается вопрос производительности и оптимизации что лучшее поебывать setInterval() или pm2
                    Как говориться есть 2 стула))

                    1 ответ Последний ответ
                    1
                    • DinozaurD Не в сети
                      DinozaurD Не в сети
                      Dinozaur
                      написал в отредактировано
                      #14

                      Очередной вкатун)))

                      hannadevH 1 ответ Последний ответ
                      2
                      • DinozaurD Dinozaur

                        Очередной вкатун)))

                        hannadevH Не в сети
                        hannadevH Не в сети
                        hannadev
                        написал отредактировано
                        #15

                        @Dinozaur

                        1 ответ Последний ответ
                        0

                        Категории

                        • Главная
                        • Новости
                        • Фронтенд
                        • Бекенд
                        • Языки программирования

                        Контакты

                        • Сотрудничество
                        • info@exlends.com
                        • Наш чат
                        • Наш ТГ канал

                        © 2024 - 2025 ExLends, Inc. Все права защищены.

                        Политика конфиденциальности
                        • Войти

                        • Нет учётной записи? Зарегистрироваться

                        • Войдите или зарегистрируйтесь для поиска.
                        • Первое сообщение
                          Последнее сообщение
                        0
                        • Лента
                        • Категории
                        • Последние
                        • Метки
                        • Популярные
                        • Пользователи
                        • Группы