I have an iptables script I want to run at boot.
I created /etc/rc.d/rc.local file with CHMOD 755 permissions which have worked on previous operating systems.
Root owns the file.
I also have #!/bin/bash as the first line.
I have also tried #!/bin/sh
I have also added a 5 second sleep thinking maybe something needs to finish.
I have temporarily disabled selinux to eliminate that as a cause.
The rc.local file looks like this:
#!/bin/bash
sleep 5
/usr/local/sbin/miniptables
The miniptables file is also owned by root, chmod 755, starts with #!/bin/bash, contains some iptables commands, and has worked on hundreds of servers.
What am I missing?
Thanks in advance.
TL;DR: Just create
/etc/rc.d/rc.local
and make it executable. That's all.I have no idea why so many articles and blogs mentions the unnecessary and incorrect step of enabling
rc-local
service unit. It won't even work as the defaultrc.local
file does not haveWantedBy
statement on purpose, because systemd carries so called generator that checks if such file exists and it is executable it automatically generates the mentionedrc-local.service
. There is no need to enable it manually, in fact, you cannot do that until systemd boots and generates it or you run the generator manually:The
/etc/rc.d/rc.local
file doesn't have execute permissions by default, so set it executable:Also, the file is not run unless the systemd
rc-local
service is enabled, but it is disabled by default. So you need to enable (and start) it:For systemd systems, it is usually better to write your own systemd service.