Скрипт Node.js не удалось запустить с помощью systemctl

Мне нужно автоматически запустить мой скрипт node.js с моей удаленной машины с помощью systemctl.

Я уже сделал файл .service и поместил его в /etc/systemd/system/. Вот файл .service:

[Unit]
Description=laporan

[Service]
ExecStart=/var/www/laporan/nodeserver/server.js
Restart=always
User=nobody
Group=root
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/var/www/laporan/nodeserver

[Install]
WantedBy=multi-user.target

Но каждый раз, когда я пытаюсь запустить службу, она возвращает следующую ошибку (выход systemctl status laporan):

● laporan.service - laporan
   Loaded: loaded (/etc/systemd/system/laporan.service; enabled)
   Active: failed (Result: start-limit) since Mon 2016-09-12 09:15:06 WITA; 11min ago
  Process: 121690 ExecStart=/var/www/laporan/nodeserver/server.js (code=exited, status=203/EXEC)
 Main PID: 121690 (code=exited, status=203/EXEC)

Sep 12 09:15:05 kominfomdc systemd[1]: Unit laporan.service entered failed state.
Sep 12 09:15:06 kominfomdc systemd[1]: laporan.service start request repeated too quickly, refusing to start.
Sep 12 09:15:06 kominfomdc systemd[1]: Failed to start laporan.
Sep 12 09:15:06 kominfomdc systemd[1]: Unit laporan.service entered failed state.

О чем именно эта ошибка? Я что-то упускаю?


person Edgar P.    schedule 12.09.2016    source источник


Ответы (2)


Я не думаю, что именно так вы запускаете приложение node. Вы просто указываете файл JavaScript здесь:

ExecStart=/var/www/laporan/nodeserver/server.js

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

ExecStart= node /var/www/laporan/nodeserver/server.js

Если node не находится на пути к исполняемому файлу, вы должны указать его:

ExecStart=/usr/local/bin/node /var/www/laporan/nodeserver/server.js
person Robert Moskal    schedule 12.09.2016
comment
получить такое уведомление: Путь к исполняемому файлу не является абсолютным. мой узел тоже находится на пути - person Edgar P.; 12.09.2016
comment
Ну, я изменил его на ExecStart=/usr/local/bin/node /var/www/laporan/nodeserver/server.js, и он работает как ад. Спасибо за Ваш ответ! - person Edgar P.; 12.09.2016
comment
Обратите внимание, что в некоторых системах узел находится в /usr/bin/node, поэтому проверьте запуск полного пути (т. е. /usr/bin/node /dir/yourapp.js или /usr/local/bin/node /dir/yourapp .js), чтобы увидеть, какой из них подойдет вам. - person Youkko; 29.12.2016

чтобы прояснить ошибку, которую вы указываете, путь к исполняемому файлу node неверен. Чтобы получить правильный путь, вы можете использовать

$ which node // /usr/bin/node

в моем случае все по-другому, я получаю /usr/bin/node в качестве пути, поэтому вы ExecStart копируете путь к узлу из командной строки.

ExecStart=/usr/bin/node /var/www/laporan/nodeserver/server.js
person zabusa    schedule 02.02.2019