从 systemd 运行我的节点应用程序-无法调用 execFile(从 pm2 运行时有效)

从 systemd 运行我的节点应用程序-无法调用 execFile(从 pm2 运行时有效)

在运行 raspian 的 raspberry Pi 上,我有一个小型节点+express 应用程序,它正在调用外部 python 脚本来触发中继。

启动应用程序时使用 pm2 一切正常。当通过将应用程序作为 systemd 服务启动来运行应用程序时,Web 服务器可以运行,但脚本从未被调用。

我必须如何配置服务才能使其正常工作?

var express = require('express');
var router = express.Router();
const { execFile } = require('node:child_process');

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'DoorMan' });
});

/* GET trigger door. */
router.get('/open', function(req, res, next) {
  res.render('open', { title: 'Door is open' });
  // res.render('index', { title: 'DoorMan' });
    const child = execFile('python3', ['/home/johnny/app/bin/door.py'], (error, stdout, stderr) => {
    if (error) {
      throw error;
    }
    
  });

});

module.exports = router;

我曾尝试设置 pm2,以便它应该在机器重启时重新启动,但我也遇到了问题,而且我宁愿坚持一种控制进程的方法。

答案1

我发现我的错误是在我调用的 .service 文件中

ExecStart=node /home/johnny/app/bin/www

这对于具有我的路径的 pm2 有效,但在服务文件中它将获取旧节点版本~12

调用我的节点的完整路径使其工作:

ExecStart=/home/johnny/.fnm/node-versions/v18.12.1/installation/bin/node /home/johnny/app/bin/www

相关内容