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 и работает на сотнях серверов.
Что мне не хватает?
Заранее спасибо.
3 ответа
/etc/rc.d/rc.local
Файл не имеет разрешений на выполнение по умолчанию, поэтому установите его исполняемым:
# chmod +x /etc/rc.d/rc.local
Кроме того, файл не запускается, если systemd rc-local
Сервис включен, но по умолчанию отключен. Так что вам нужно включить (и запустить) это:
# systemctl start rc-local
# systemctl enable rc-local
Для системных систем обычно лучше написать свой собственный сервис systemd.
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.
Создайте свой скрипт: vim /etc/rc.d/rc.local
Пример скрипта:
#!/bin/bash
echo "test script"
Сделать скрипт исполняемым: chmod +x /etc/rc.d/rc.local
Исправить контекст SELinux: restorecon -v /etc/rc.d/rc.local
Включить и запустить сервис:
systemctl enable rc-local.service
systemctl start rc-local.service
systemctl status rc-local.service