在 CentOS 上使用 nohup 启动程序时“日志显示启动失败”或“进程起不来”,通常不是 nohup 本身的问题,而是环境、权限、路径或程序自身错误导致的。下面按常见原因系统说明,并给出排查方法。
nohup ./app > app.log 2>&1 &
如果当前目录不对,或脚本里用了相对路径,就会失败。
✅ 建议:
nohup /opt/app/app >> /var/log/app.log 2>&1 &
ls -l app
chmod +x app
✅ 日志目录示例:
touch /var/log/app.log
chown appuser:appuser /var/log/app.log
nohup 不会加载 bash 登录环境
❌ 错误示例:
nohup java -jar app.jar &
✅ 正确示例:
nohup /usr/java/jdk1.8/bin/java -jar app.jar > app.log 2>&1 &
或:
source /etc/profile
nohup java -jar app.jar &
nohup 只保证“不挂断”,不保证“不退出”。
查看日志:
cat nohup.out
cat app.log
常见错误:
如果你在 systemd 服务外用 nohup,但系统策略限制:
排查:
getenforce
setenforce 0 # 临时关闭测试
可能原因:
验证:
ps -ef | grep app
nohup /full/path/app \
> /var/log/app.log 2>&1 &
或后台脚本:
#!/bin/bash
cd /opt/app
./app >> /var/log/app.log 2>&1
# /etc/systemd/system/app.service
[Unit]
Description=App
After=network.target
[Service]
User=appuser
ExecStart=/opt/app/app
Restart=always
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start app
journalctl -u app -f
nohup.out 或指定日志ps -ef 看进程是否存在java -version / python --version 是否正常ss -lntp如果你愿意,可以把:
nohup.out 或日志内容贴出来,我可以直接帮你定位具体失败原因。