systemd 没有运行 /etc/rc.local?

systemd 没有运行 /etc/rc.local?

我正在使用 Archlinux,最近开始尝试 systemd。

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

正如 Wiki 页面中提到的,我确实运行过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

有什么建议么?

答案1

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启动
超时时间=0
标准输出=tty
退出后继续保留=是
SysVStartPriority=99

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

答案2

对于 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

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

答案3

Pkgfile(在我的系统上)显示:

$ pkgfile --search rc-local.service
community/initscripts-systemd

该软件包会安装您可能不需要的其他内容,但您可以禁用它。另请参阅: https://wiki.archlinux.org/index.php/Systemd#The_initscripts-systemd_package

答案4

两个常见的陷阱:

  1. 不要忘记制作/etc/rc.d/rc.local可执行文件。您可以使用

    # chmod a+rx /etc/rc.d/rc.local
    

    使其可执行。

  2. 不要忘记#!/bin/sh在 的第一行添加一行/etc/rc.d/rc.local。如下所示:

    #  head -1 /etc/rc.d/rc.local 
    #!/bin/sh
    # file /etc/rc.d/rc.local 
    /etc/rc.d/rc.local: POSIX shell script, ASCII text executable
    

    如果您没有得到类似的输出,请编辑/etc/rc.d/rc.local以在最顶部添加一行,仅包含#!/bin/sh

相关内容