Что такое служба планировщика?

Служба планировщика предоставляет возможность выполнять задачи в определенное время или через определенные промежутки времени.

Как написать службу-планировщик Node.js?

Вы можете написать службу планировщика в основном в любом современном фреймворке, таком как .net core, elixir, node.js, язык go и т.д.

В данном примере я использую node.js. Чтобы выполнить этот пример, вам необходимо иметь базовые знания о javascript.

Выполните следующие шаги для создания базовой службы планировщика:

1 — Создайте папку проекта для вашего сервиса

mkdir scheduler-service && cd scheduler-service
Войдите в полноэкранный режим Выйдите из полноэкранного режима

2 — запустите npm

npm init -y
Войдите в полноэкранный режим Выйти из полноэкранного режима

3 — установите следующие пакеты:

  • node-schedule
  • log4js

Я выбрал пакет node-schedule для функциональности cron-подобного планировщика и log4js для логирования.

4 — Создайте файл javascript

  • например: schedule.js

5 — Импортируйте библиотеку node-schedule и назначьте задание функции scheduleJob

const schedule = require("node-schedule");

const job = schedule.scheduleJob("*/1 * * * *", function () {
  console.log("every minute you will see this log");
});
Вход в полноэкранный режим Выход из полноэкранного режима

Как видно из примера выше, функция scheduleJob имеет 2 параметра:

1 — выражение cron

  • Выражения Cron используются для инициализации повторяющегося времени для задания. Оно представляет собой строку, состоящую из шести или семи подвыражений (полей), которые описывают отдельные детали расписания.
┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    │
│    │    │    │    │    └ day of week (0 - 7) (0 or 7 is Sun)
│    │    │    │    └───── month (1 - 12)
│    │    │    └────────── day of month (1 - 31)
│    │    └─────────────── hour (0 - 23)
│    └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59)

Вход в полноэкранный режим Выход из полноэкранного режима

2 — функция

  • Эта функция определяет задание, которое мы хотим запланировать.

Полный js-код, использующий log4js для ведения журнала:

const log4js = require("log4js");
log4js.configure({
  appenders: { log: { type: "file", filename: "schedule.log" } },
  categories: { default: { appenders: ["log"], level: "info" } },
});

const logger = log4js.getLogger("log");

logger.info("scheduler started.");
const job = schedule.scheduleJob("*/1 * * * *", function () {
  logger.warn("every minute you will see this log");
});
Вход в полноэкранный режим Выход из полноэкранного режима

Как написать служебный файл systemd?

Чтобы зарегистрировать наш сервис в службе linux, нам нужно создать файл службы systemd.

Для создания служебного файла systemd выполните следующие действия:

1 — введите в терминал linux следующую команду

  • vi /etc/systemd/system/schedule.service

2 — поместите в него следующее содержимое

[Unit]
Description=node service

[Service]
WorkingDirectory=/home/emin/node/
User=ubuntu
ExecStart=/usr/bin/node /home/ubuntu/hello_env.js
Restart=on-failure
RestartSec=10
Войти в полноэкранный режим Выйти из полноэкранного режима

3 — sudo systemctl daemon-reload

  • Вы должны делать это каждый раз, когда любой из служебных файлов изменяется, чтобы system подхватил новую информацию.

4 — sudo systemctl start schedule

5 — sudo systemctl status schedule

  • Эта команда показывает статус службы.

После запуска службы вы должны увидеть файл schedule.log в месте расположения службы.

Ресурсы:


  • run-a-node-js-app-as-a-background-service
  • node-schedule
  • practical-implementation-net-core-background-services
  • node-js-app-with-systemd

Оцените статью
devanswers.ru
Добавить комментарий