温馨提示×

linux nohup日志为何权限错

小樊
40
2026-10-21 01:26:17
栏目: 智能运维

在 Linux 下使用 nohup 时,“日志权限错”通常不是 nohup 本身的问题,而是运行环境、用户、目录权限或重定向方式导致的。下面按常见原因逐一说明。


一、最常见原因:当前用户没有写日志文件的权限

nohup ./app.sh > app.log 2>&1 &

如果:

  • app.log 已存在,且属于 root 或其他用户
  • 当前用户不是文件 owner,也没有写权限

就会出现:

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 chmod

三、sudo 启动 nohup,但日志在普通用户目录

sudo nohup ./app.sh > /home/user/app.log 2>&1 &

此时:

  • 进程是 root
  • 日志目录属于 user
  • root 一般能写,但如果目录权限是 700,也可能失败

✅ 建议:

sudo touch /var/log/app.log
sudo chown root:root /var/log/app.log

四、nohup.out 权限问题(没指定日志时)

如果你只写:

nohup ./app.sh &

默认会写 nohup.out,如果:

  • 当前目录不可写
  • nohup.out 已存在且无权修改

会看到:

nohup: failed to open 'nohup.out': Permission denied

✅ 解决:

nohup ./app.sh > my.log 2>&1 &

五、SELinux / 安全模块限制(服务器常见)

在 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

快速排查清单 ✅

  1. 谁运行? whoami
  2. 日志在哪? pwd
  3. 文件/目录权限?
  4. 是否 sudo?
  5. SELinux 是否开启?
  6. 文件系统是否只读?

如果你愿意,可以把具体报错信息 + 命令 + ls -l 输出贴出来,我可以直接帮你定位是哪一条原因。

0 踩