在 Debian 系统中,spool 目录无法写入通常和权限、服务用户、磁盘状态或 SELinux/AppArmor有关。下面按常见原因逐一说明,你可以对照排查。
spool 目录一般位于:
/var/spool//var/spool/cron//var/spool/mail//var/spool/cups//var/spool/postfix/ls -ld /var/spool
ls -ld /var/spool/xxx
drwxr-xr-x 但服务用户不是 owner)sudo chown -R user:group /var/spool/xxx
sudo chmod 1733 /var/spool/xxx # sticky + 写权限
⚠️ 不要随意
chmod 777,有安全风险
很多 spool 目录只能被特定服务用户写入:
| 目录 | 服务用户 |
|---|---|
/var/spool/cron |
crontab |
/var/spool/mail |
mail |
/var/spool/cups |
lp |
/var/spool/postfix |
postfix |
如果你用 root 以外用户写,会失败。
ps aux | grep 服务名
id 用户名
df -h
df -i
即使目录有权限,磁盘满或 inode 用完也会导致无法写入。
mount | grep spool
如果看到 ro,说明是只读:
sudo mount -o remount,rw /var
Debian 默认启用 AppArmor。
sudo aa-status
如果相关服务(如 cupsd, postfix)被限制,会拒绝写 spool。
sudo dmesg | grep apparmor
sudo journalctl -xe
有些服务会先写临时文件再移到 spool:
echo $TMPDIR
ls -ld /tmp
/tmp 权限异常也会影响。
crontab -e
报错:
can't create temp file
解决:
sudo chown root:crontab /var/spool/cron
sudo chmod 1730 /var/spool/cron
ls -ld /var/spool
df -h
df -i
mount | grep var
sudo journalctl -xe
sudo aa-status
如果你能告诉我:
我可以直接给你精准修复命令。