在运行 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