Это программируемое на Tibbo BASIC/C устройство, функциональность которого определяет загруженное приложение.
Мы предлагаем различные готовые к использованию приложения, например, Serial-over-IP (SoI), Modbus Gateway и Sensor Hub.
Приложение Node.js в качестве сервиса

Приложение Node.js в качестве сервиса

Давайте представим, что вы создаете приложение-сервис на Node.js, т.е. приложение, которое запускается при загрузке и продолжает работать до тех пор, пока система не будет выключена. Для этого необходимо дополнительное ПО, которое будет запускать и перезапускать приложение. Один из вариантов — использовать Forever.

Forever — это диспетчер процессов Case Node.js рабочей среды для приложений Node.js, доступный на нескольких широко распостранённых операционных системах. Особых недостатков у диспетчера Forever нет, за исключением одного: это еще один процесс Node.js, который "съест" приличный объем оперативной памяти (около 30МБ), NAND флеш-памяти и ресурсов процессора, выполняя при этом лишь одну примитивную функцию: запуск программы и её перезагрузку при сбое в работе.

Более удачное решение — остановить свой выбор на SystemD. Это универсальный менеджер процессов и служб для Linux с гибкими настройками, у которого есть все, что нужно: зависимости для запуска сервиса, контроль состояния, перезапуск по событию, интеграция с D-Bus и множество других возможностей. SystemD — это очень популярный менеджер процессов. В интернете опубликовано большое количество статей об интеграции Node.js с SystemD. Вот, например, эта или эта. Статьи, на которые приведены ссылки, написаны людьми, работающими с сервисами Node.js на высоком профессиональном уровне.

Ниже приведен пример, как использовать SystemD, чтобы превратить приложение в сервис. Менеджер системы и служб предполагает, что app.js находится в /opt/node-apps/demo0/site/.

Выполните следующее:

  • Создайте файл myapp.service с таким содержимым:
# copy this file to /lib/systemd/system/

[Unit]
Description=LTPS NodeJS Test Application
After=network-online.target

[Service]
Restart=on-failure
WorkingDirectory=/opt/node-apps/demo0/site/
ExecStart=/usr/bin/node /opt/node-apps/demo0/site/app.js

[Install]
WantedBy=multi-user.target
  • Сохраните его и скопируйте в /lib/systemd/system/.

  • Выполните следующую команду:

systemctl daemon-reload
  • SystemD должен знать о сервисе myapp, проинструктируйте его загружать этот сервис при запуске системы:
systemctl enable myapp
  • Теперь запустите сервис myapp:
systemctl restart myapp

Вот и всё!

Всё, что сервис myapp выводит в стандартный поток вывода или в поток вывода ошибок будет направляться в системный журнал. Поэтому, если что-то вдруг идет не так, можно использовать Веб-просмотрщик системного журнала (System Journal Web Viewer) для просмотра сообщений о трассировке стека, генерируемых обработчиком исключений Node.js или выводом console.log().

  • Возможно, вам покажется удобным просматривать занесённые в журнал сообщения непосредственно в CLI. (Чтобы прекратить просмотр в journal reader, нажмите CTRL+C):
journalctl -lf -u myapp
  • Для остановки сервиса наберите:
systemctl stop myapp
  • Для отключения сервиса (чтобы запретить его загрузку при запуске системы), выполните:
systemctl disable myapp
  • Для просмотра статуса сервиса наберите:
systemctl status myapp
  • Когда необходимо указать рабочую директорию сервиса и ограничить потребляемые ресурсы, выполните:
[Unit]
Description=LTPS NodeJS Test Application
After=network-online.target

[Service]
Restart=on-failure
# do chdir before running the service
WorkingDirectory=/opt/node-apps/demo0/site/
ExecStart=/usr/bin/node app.js
# limit CPU and RAM quota for our service
CPUAccounting=true
CPUQuota=10%
MemoryAccounting=true
MemoryLimit=50M

[Install]
WantedBy=multi-user.target
Приложение Node.js в качестве сервиса