【发布时间】:2018-06-01 23:13:50
【问题描述】:
通常在不存在的文件 (config.js) 上执行带有 fs.stat 的 nodejs 脚本时,正如预期的那样,它会通过回调传递一个错误;但是,当使用 systemd 执行与守护进程相同的脚本时,fs.stat 不会提供任何错误,stat.isFile() 返回 true。
我做错了吗?
这是一个错误吗?
这是一个功能吗?
- 操作系统:Arch linux
- Nodejs:v9.3.0
server.js(我提到的脚本):
const fs = require('fs');
fs.stat('./config.json', (err, stat) => {
console.log('err:', err);
if (err) return;
console.log('stat:', stat);
console.log('stat.isFile():', stat.isFile());
});
/etc/systemd/system/nat-server.service(systemd文件):
[Unit]
Description=Network address transaltion server
Documentation=https://github.com/jkeveren/nat-server
After=network.target
[Service]
Type=simple
User=jkeveren
ExecStart=/usr/bin/node /home/jkeveren/mega/code/util/nat-server/server.js
Restart=on-failure
[Install]
WantedBy=multi-user.target
正常(所需)输出:
err: { Error: ENOENT: no such file or directory, stat './config.json'
errno: -2,
code: 'ENOENT',
syscall: 'stat',
path: './config.json' }
systemd 输出(注意最后一行):
Dec 19 13:49:59 jji-li systemd[1]: Started Network address transaltion server.
Dec 19 13:50:00 jji-li node[17498]: err: null
Dec 19 13:50:00 jji-li node[17498]: stat: Stats {
Dec 19 13:50:00 jji-li node[17498]: dev: 2051,
Dec 19 13:50:00 jji-li node[17498]: mode: 33188,
Dec 19 13:50:00 jji-li node[17498]: nlink: 1,
Dec 19 13:50:00 jji-li node[17498]: uid: 0,
Dec 19 13:50:00 jji-li node[17498]: gid: 0,
Dec 19 13:50:00 jji-li node[17498]: rdev: 0,
Dec 19 13:50:00 jji-li node[17498]: blksize: 4096,
Dec 19 13:50:00 jji-li node[17498]: ino: 15,
Dec 19 13:50:00 jji-li node[17498]: size: 67,
Dec 19 13:50:00 jji-li node[17498]: blocks: 8,
Dec 19 13:50:00 jji-li node[17498]: atimeMs: 1513681349595.1235,
Dec 19 13:50:00 jji-li node[17498]: mtimeMs: 1513681349595.1235,
Dec 19 13:50:00 jji-li node[17498]: ctimeMs: 1513681349595.1235,
Dec 19 13:50:00 jji-li node[17498]: birthtimeMs: 1513681349595.1235,
Dec 19 13:50:00 jji-li node[17498]: atime: 2017-12-19T11:02:29.595Z,
Dec 19 13:50:00 jji-li node[17498]: mtime: 2017-12-19T11:02:29.595Z,
Dec 19 13:50:00 jji-li node[17498]: ctime: 2017-12-19T11:02:29.595Z,
Dec 19 13:50:00 jji-li node[17498]: birthtime: 2017-12-19T11:02:29.595Z }
Dec 19 13:50:00 jji-li node[17498]: stat.isFile(): true
【问题讨论】:
-
查看
stat结构中可用的time,我猜该文件确实在那里——最近创建的。您的脚本可能正在创建它? -
@Malice 是的,我想到了,但这是上面发布的整个 server.js,所以没有有目的的创建,运行后文件仍然不存在。 server.js 将在稍后创建该文件,如果它未找到但尚未实现。
-
当您将 './config.json' 更改为 './nonexistent.json' 时,您是否观察到相同的效果,即一个从未存在的文件,现在没有(或将要)创建它(或将来)?换句话说,您是否看到所有不应该存在的文件或仅存在特定文件的这种行为?
-
@rsp 啊,谢谢,它似乎适用于 nonexistant.json。正如预期的那样,守护程序输出向我显示 ENOENT。所以我似乎有一个幻影 config.json 文件。我会尝试重新启动。
-
重启并没有解决问题,仍然是幻像 config.json 。我还尝试重命名包含 config.json 的目录,但没有运气。
标签: node.js linux daemon fs systemd