Depois de ler muito mais, encontrei a solução que funciona para mim.
Eu li este guia, Serviços em execução após a conclusão da rede . Uma pequena citação do guia:
This will ensure that all configured network devices are up and have an IP address assigned before boot continues.
Isso é exatamente o que eu queria, então ativei este serviço e defini a regra de dependência no arquivo de serviço para crond
:
[root@srv]# systemctl enable NetworkManager-wait-online
[root@srv]# vi /lib/systemd/system/crond.service
Requires=network.target
After=syslog.target auditd.service systemd-user-sessions.service time-sync.target network.target mysqld.service
Como mysqld
ainda é baseado no antigo init.d
, precisei criar um serviço systemd
como sugerido aqui, systemctl enable difere do início do systemctl :
[root@srv]# vi /lib/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.d/init.d/mysql start
ExecStop=/etc/rc.d/init.d/mysql stop
[Install]
WantedBy=multi-user.target
[root@srv]# systemctl daemon-reload
[root@srv]# chkconfig mysql off
[root@srv]# systemctl enable mysqld
E finalmente configure o serviço Apache para a inicialização após MySQL:
[root@srv]# vi /lib/systemd/system/httpd.service
Requires=mysqld.service
After=network.target remote-fs.target nss-lookup.target mysqld.service
Isso funciona para mim pelo menos.
Eu usei esses comandos para verificá-lo posteriormente, onde eu posso ver claramente que a rede foi iniciada antes de pelo menos o MySQL e o Apache. Eu não consigo ver o crond
em qualquer lugar, mas posso ver que está funcionando nos meus scripts:
[root@srv]# systemd-analyze critical-chain
multi-user.target @10.510s
+ httpd.service @10.344s +165ms
+ mysqld.service @9.277s +1.065s
+ network.target @9.273s
+ network.service @8.917s +355ms
+ iptables.service @444ms +157ms
+ basic.target @443ms
[CUT]
Alguns outros comandos úteis que usei são:
# See exactly what takes how long (who to blame for the delay)
[root@srv]# systemd-analyze blame
# Check available names that can be used in the service files
[root@srv]# systemctl list-unit-files
Se alguém puder ver uma maneira melhor de fazer isso, compartilhe.