systemd 不运行 /etc/rc.local?

Fel*_*Yan 13 arch-linux

我正在使用 Archlinux 并开始尝试 systemd 这些天。

但是,我发现 systemd 没有加载我的 /etc/rc.local 脚本。

正如维基页面中提到的,我确实运行了systemctl enable rc-local.service,但这没有帮助。

我的 /etc/rc.local 文件的内容是:

echo -n 120 > /sys/devices/platform/i8042/serio1/speed
echo -n 250 > /sys/devices/platform/i8042/serio1/sensitivity
iptables --table nat -A POSTROUTING -s 192.168.0.0/16 -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)

有什么建议?

小智 29

对于 systemd 188-2,systemd 抱怨没有[Install]节,因此无法启用 rc.local 服务。早期版本可能是这种情况,但由于 Arch 开发人员最近才宣布 systemd 将成为默认版本,我正在修复我的系统。

要解决这个问题,只需在 中为多用户目标添加一个部分/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
Run Code Online (Sandbox Code Playgroud)

创建/etc/rc.local脚本并使其可执行chmod +x /etc/rc.local

  • 这是因为 `rc-local.service` 从来都不是通过 `systemctl enable` 启用的服务,而是自 2011 年以来由 _generator_ 自动启用的服务。**然而** Arch Linux,正如在 https://unix.stackexchange.com/a/471871/5132 所解释的那样,并没有打开 systemd 中首先提供生成器的向后兼容性选项。 (2认同)

Pat*_*hes 16

Arch 可能没有包含运行rc.local.

只需创建一个/etc/systemd/system/rc-local.service包含以下内容的文件(从我的 Fedora systemd 系统逐字复制):

# 这个文件是 systemd 的一部分。
#
# systemd 是免费软件;您可以重新分发和/或修改它
# 根据 GNU 通用公共许可证的条款,由
# 自由软件基金会;许可证的第 2 版,或
#(由您选择)任何更高版本。

[单元]
说明=/etc/rc.local 兼容性
ConditionPathExists=/etc/rc.local

[服务]
类型=分叉
ExecStart=/etc/rc.local start
超时秒数=0
标准输出=tty
RemainAfterExit=yes
SysVStartPriority=99

然后,只需systemctl enable rc-local.service以 root 身份运行即可启用它。您还可以通过运行systemctl start rc-local.service.

  • 你不能在没有安装部分的单元上发出“启用”,这个例子可能不起作用。 (6认同)
  • 那时它可能被禁用了。尝试运行`systemctl enable rc-local.service`。如果您仍然遇到问题,请发布 `systemctl status rc-local.service` 的输出。 (2认同)