我正在使用 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
两个常见的陷阱:
不要忘记制作
/etc/rc.d/rc.local
可执行文件。您可以使用# chmod a+rx /etc/rc.d/rc.local
使其可执行。
不要忘记
#!/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
。