在 Linux 上运行 JavaScript(通常是 Node.js)时,日志为空通常不是“没执行”,而是输出没到你看到的地方。下面按最常见原因说明。
常见写法:
node app.js > /dev/null 2>&1
这样 stdout 和 stderr 都会被丢弃,你当然看不到任何日志。
✅ 解决:
node app.js
# 或
node app.js > app.log 2>&1
例如:
setTimeout(() => {
console.log('done')
}, 5000)
如果你用:
node app.js &
然后 shell 退出,进程可能被杀。
✅ 解决:
node app.js
# 或
nohup node app.js &
代码里可能是:
const fs = require('fs')
fs.writeFileSync('log.txt', 'hello')
而不是 console.log
✅ 解决:
cat log.txt
例如 winston:
const logger = winston.createLogger({})
// 没加 transports
结果是 什么都不输出
✅ 正确示例:
winston.add(new winston.transports.Console())
如果你用 systemd:
[Service]
ExecStart=/usr/bin/node /app/app.js
日志不在终端,而在:
journalctl -u your-service -f
try {
doSomething()
} catch (e) {
// 啥也没做
}
✅ 至少:
catch (e) {
console.error(e)
}
检查:
echo $?
ps aux | grep node
node -v
node app.js
# 看是否有输出
node app.js 2>&1 | cat
如果你愿意,可以把:
发出来,我可以直接帮你定位是哪一条。