在 CentOS 下使用 nohup 时,日志路径是可以手动指定的。下面给你几种常见、规范的用法。
nohup java -jar app.jar &
默认日志会生成在:
nohup.out (当前目录)
⚠️ 问题:
nohup java -jar app.jar > /data/logs/app.log 2>&1 &
含义:
> :标准输出2>&1 :错误输出也写入同一个文件& :后台运行✅ 生产环境推荐
nohup java -jar app.jar > /data/logs/app.out 2> /data/logs/app.err &
nohup java -jar app.jar >> /data/logs/app.log 2>&1 &
mkdir -p /data/logs
nohup java -jar /opt/app/app.jar \
> /data/logs/app.log 2>&1 &
echo $! > /data/logs/app.pid
ps -ef | grep app.jar
tail -f /data/logs/app.log
即使你重定向了日志,如果程序内部仍写 stdout,有时仍会生成 nohup.out。
✅ 解决方法:
nohup sh -c 'exec java -jar app.jar > /data/logs/app.log 2>&1' &
systemd(CentOS 7+ 强烈推荐)[Unit]
Description=app service
[Service]
ExecStart=/usr/bin/java -jar /opt/app/app.jar
StandardOutput=append:/data/logs/app.log
StandardError=append:/data/logs/app.log
Restart=always
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start app
| 场景 | 命令 |
|---|---|
| 指定日志 | nohup cmd > log 2>&1 & |
| 追加日志 | >> log 2>&1 & |
| 分开日志 | > out 2> err & |
| 生产环境 | systemd |
如果你愿意,可以把 具体命令 / 程序类型(Java / Python / Shell) 发我,我可以帮你写一条完全适合你环境的命令。