在 Linux 下使用 nohup 时,“日志权限错”通常不是 nohup 本身的问题,而是运行环境、用户、目录权限或重定向方式导致的。下面按常见原因逐一说明。
nohup ./app.sh > app.log 2>&1 &
如果:
app.log 已存在,且属于 root 或其他用户就会出现:
Permission denied
✅ 解决:
ls -l app.log
chown 当前用户:当前用户 app.log
# 或
chmod 664 app.log
或换个你有写权限的目录:
nohup ./app.sh > /home/youruser/app.log 2>&1 &
很多人忽略目录权限:
nohup ./app.sh > /var/log/app.log 2>&1 &
如果 /var/log 对你不可写,就会失败。
✅ 检查:
ls -ld /var/log
✅ 解决:
sudo chown / sudo chmodsudo nohup ./app.sh > /home/user/app.log 2>&1 &
此时:
700,也可能失败✅ 建议:
sudo touch /var/log/app.log
sudo chown root:root /var/log/app.log
如果你只写:
nohup ./app.sh &
默认会写 nohup.out,如果:
nohup.out 已存在且无权修改会看到:
nohup: failed to open 'nohup.out': Permission denied
✅ 解决:
nohup ./app.sh > my.log 2>&1 &
在 CentOS / RHEL:
即使权限看着是对的,SELinux 也可能禁止写日志。
✅ 检查:
getenforce
✅ 临时验证:
setenforce 0
✅ 长期解决(示例):
semanage fcontext -a -t var_log_t "/custom/logs(/.*)?"
restorecon -Rv /custom/logs
mount | grep "on / "
如果看到 ro(read-only),任何写都会失败。
✅ 解决:
mount -o remount,rw /
mkdir -p ~/logs
nohup ./app.sh > ~/logs/app.log 2>&1 &
或 systemd(更规范):
[Service]
User=youruser
ExecStart=/path/app.sh
StandardOutput=append:/home/youruser/logs/app.log
whoamipwd如果你愿意,可以把具体报错信息 + 命令 + ls -l 输出贴出来,我可以直接帮你定位是哪一条原因。