Служба планировщика предоставляет возможность выполнять задачи в определенное время или через определенные промежутки времени.
- Как написать службу-планировщик Node.js?
- 1 — Создайте папку проекта для вашего сервиса
- 2 — запустите npm
- 3 — установите следующие пакеты:
- 4 — Создайте файл javascript
- 5 — Импортируйте библиотеку node-schedule и назначьте задание функции scheduleJob
- 1 — выражение cron
- 2 — функция
- Как написать служебный файл systemd?
- 1 — введите в терминал linux следующую команду
- 2 — поместите в него следующее содержимое
- 3 — sudo systemctl daemon-reload
- 4 — sudo systemctl start schedule
- 5 — sudo systemctl status schedule
- Ресурсы:
Как написать службу-планировщик 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