温馨提示×

为何nohup日志没有权限

小樊
54
2026-08-05 09:10:48
栏目: 编程语言

nohup 日志没有权限,通常不是 nohup 本身的问题,而是文件权限、用户身份或目录限制导致的。下面按常见原因给你系统排查一下。


一、最常见原因

1️⃣ 日志文件已经存在,且属于其他用户

例如:

nohup java -jar app.jar > nohup.out 2>&1 &

如果 nohup.out 之前是由 root 创建的,而你当前是普通用户:

ls -l nohup.out
-rw-r--r-- 1 root root 12345 nohup.out

那么你再运行 nohup 就没权限写入。

✅ 解决方式:

# 删除旧日志(确认不需要)
rm nohup.out

# 或改权限
sudo chown $USER:$USER nohup.out

2️⃣ 当前目录你没有写权限

nohup 默认在当前目录生成 nohup.out

如果你在:

/root
/usr
/opt

而这些目录你没权限:

touch test.txt
# 报 Permission denied

✅ 解决方式:

  • 换目录执行
cd ~
nohup java -jar app.jar > nohup.out 2>&1 &
  • 或指定可写路径
nohup java -jar app.jar > /home/user/logs/nohup.out 2>&1 &

3️⃣ 用 sudo 启动,但目录是普通用户的

sudo nohup java -jar app.jar > nohup.out &

此时:

  • 进程是 root
  • nohup.out 所在目录属于普通用户

root 虽然能写,但如果父目录权限不足,也可能失败。

✅ 推荐写法:

sudo sh -c 'nohup java -jar app.jar > /var/log/app.log 2>&1 &'

二、容易忽略的情况

4️⃣ 目录被设置了特殊权限

查看:

ls -ld 目录名

常见限制:

  • drwxr-xr-x:其他人不可写
  • chattr +i:文件被锁定

检查是否被锁:

lsattr nohup.out

解锁:

sudo chattr -i nohup.out

5️⃣ 磁盘满了(不是权限,但表现像)

df -h

磁盘满时也会报:

Permission denied

6️⃣ SELinux 限制(较少见)

getenforce

如果是 Enforcing,可能限制写入。

临时验证:

sudo setenforce 0

三、推荐的规范写法 ✅

不要依赖默认 nohup.out

mkdir -p /home/user/logs
nohup java -jar app.jar > /home/user/logs/app.log 2>&1 &

或:

nohup java -jar app.jar >> app.log 2>&1 &

四、快速自查清单 ✅

你可以逐条确认:

  • [ ] whoami 是谁
  • [ ] ls -l nohup.out 是谁的
  • [ ] 当前目录 touch test 能不能成功
  • [ ] 磁盘是否满 df -h
  • [ ] 有没有 sudo 混用

如果你愿意,可以把下面信息贴出来,我可以精准判断:

whoami
pwd
ls -ld .
ls -l nohup.out

0