You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 20.04中rc.local无法生效执行chown脚本的问题求助

Ubuntu 20.04中rc.local无法生效执行chown脚本的问题求助

看起来你已经做了不少尝试,但文件夹权限还是没按预期修改,咱们一步步排查可能的问题:

首先,先看你提供的/etc/systemd/system/rc-local.service文件,里面有明显的粘贴错误——最后部分重复了[Unit]和[Service]的开头,而且WantedBy字段也没写完(变成了multi-user.targ[Unit]),这会导致systemd无法正确识别服务配置,大概率是核心问题之一!

第一步:修复rc-local.service配置文件

把你的/etc/systemd/system/rc-local.service替换成完整正确的内容:

[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target

然后重新加载systemd配置并重启服务:

sudo systemctl daemon-reload
sudo systemctl restart rc-local.service

第二步:确认脚本和权限细节

  1. 确保你的/opt/chownscript.sh有执行权限:
sudo chmod +x /opt/chownscript.sh

虽然你用sh调用脚本不需要执行权限,但保证权限正确能避免潜在的环境问题。
2. 把脚本里的chown改成绝对路径,避免系统环境变量差异导致命令找不到:

#!/bin/bash
/usr/bin/chown -R 1001:1001 /opt/redis
exit 0

第三步:检查执行时机冲突

从systemctl日志看,rc-local已经成功执行了chown命令,但权限没变化,还有一种常见可能是redis服务在rc.local之后启动——如果redis启动时会重新生成文件或重置权限,那你之前的chown操作就被覆盖了。

这种情况下,更可靠的做法是直接在redis的systemd服务里添加前置操作:

  1. 找到redis的服务文件(通常是/etc/systemd/system/redis.service或/lib/systemd/system/redis.service)
  2. 在[Service]部分添加一行:
ExecStartPre=/usr/bin/chown -R 1001:1001 /opt/redis
  1. 重新加载配置并重启redis:
sudo systemctl daemon-reload
sudo systemctl restart redis.service

这样每次redis启动前都会自动修改权限,比依赖rc.local更稳妥。

另外,注意到你的systemctl日志里有sudo执行chown的记录,但你提供的脚本里并没有sudo——如果你的实际脚本里加了sudo,其实完全没必要,因为rc.local本身就是以root权限执行的,多余的sudo反而可能引入不必要的问题,建议脚本里直接用chown命令即可。

备注:内容来源于stack exchange,提问作者ezzys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 11:12:58