rc.local 未在 Fedora 23 上运行

rc.local 未在 Fedora 23 上运行

我有一个要在启动时运行的 iptables 脚本。
我创建了 /etc/rc.d/rc.local 文件,其权限为 CHMOD 755,该权限在以前的操作系统上有效。Root
拥有该文件。
我还将 #!/bin/bash 作为第一行。
我还尝试了 #!/bin/sh
我还添加了 5 秒的睡眠时间,认为可能需要完成某些操作。
我暂时禁用了 selinux 以消除此原因。rc.local
文件如下所示:

#!/bin/bash  
sleep 5  
/usr/local/sbin/miniptables 

miniptables 文件也归 root 所有,chmod 755,以 #!/bin/bash 开头,包含一些 iptables 命令,并且已在数百台服务器上运行。
我遗漏了什么?
提前致谢。

答案1

TL;DR:只需创建/etc/rc.d/rc.local并使其可执行。就这样。

我不知道为什么这么多文章和博客都提到了启用rc-local服务单元这一不必要且不正确的步骤。它甚至不会起作用,因为默认rc.local文件故意没有WantedBy声明,因为 systemd 带有所谓的发电机检查该文件是否存在且是否可执行,它会自动生成上述内容rc-local.service。无需手动启用它,事实上,在 systemd 启动并生成它或手动运行生成器之前,您无法做到这一点:

# systemctl enable --now rc-local
The unit files have no installation config (WantedBy=, RequiredBy=, Also=,
Alias= settings in the [Install] section, and DefaultInstance= for template
units). This means they are not meant to be enabled using systemctl.

Possible reasons for having this kind of units are:
• A unit may be statically enabled by being symlinked from another unit's
  .wants/ or .requires/ directory.
• A unit's purpose may be to act as a helper for some other unit which has
  a requirement dependency on it.
• A unit may be started when needed via activation (socket, path, timer,
  D-Bus, udev, scripted systemctl call, ...).
• In case of template units, the unit is meant to be enabled with some
  instance name specified.

答案2

/etc/rc.d/rc.local文件默认没有执行权限,因此将其设置为可执行文件:

# chmod +x /etc/rc.d/rc.local

此外,除非启用了 systemdrc-local服务,否则不会运行该文件,但默认情况下它是禁用的。因此,您需要启用(并启动)它:

# systemctl start rc-local
# systemctl enable rc-local

对于 systemd 系统,通常最好编写你自己的 systemd 服务

相关内容