Дополню: можно запустить это все в докере с установкой флага рестарта unless-stopped
. Тогда нужный контейнер:
1. Будет запускаться во время старта системы
2. Если вручную остановишь (контейнер), то запускаться после старта системы не будет
3. При завершении с ошибкой контейнер будет перезапущен
systemd - нормальный вариант для ЛИНУКСОВ (некоторые дистрибутивы его не имеют - их меньшинство поэтому можно не заморачиваться), но не для *nix - например, для mac будет launchd, для bsd - init. Это разные реализации и не совместимы с systemd. (Про винду молчу).
Поэтому если хочется более-менее кросс-платформы, то стоит:
1. Заранее создать нужные скрипты для создания конфигов systemd/launchd/bsd/windows service
2. Установить docker и запускать через него
P.S. конечно тащить за собой целый докер для одной программы это моветон, но живут же как-то джаваскриптисты со своими node_modules