Acabei de atualizar do CentOS 6.5 para 7.0 e não estou muito feliz porque o novo systemd
provavelmente está me causando problemas. Parece que está simplesmente inicializando muito rápido, iniciando processos de forma assíncrona e danificando as dependências de serviço.
Por exemplo, tenho alguns scripts de configuração nos crond
quais são acionados após uma reinicialização:
@reboot /root/scripts/check_gmail.sh
@reboot /root/scripts/start_gps_listener.sh
Isso resulta em todos os tipos de erros estranhos (mostrando apenas um deles):
Warning: stream_socket_client(): unable to connect to tcp://192.168.20.4:4001
(Network is unreachable) in /root/scripts/check_gmail.php on line 137
ERROR: Network is unreachable (101)
Acima, estou escrevendo em um soquete TCP. É bastante claro para mim que crond
é iniciado antes da rede ser inicializada corretamente como o network is unreachable
.
O mesmo acontece com o Apache e o MySQL (MariaDB). O MySQL é bastante lento para iniciar (muitos dados), o que significa que o Apache e muitos dos meus crond
scripts de inicialização estão falhando, pois o banco de dados MySQL não está sendo executado quando os scripts estão sendo chamados.
Eu tentei configurar dependências, mas sem sorte; Anexei network
e mysql
serviços para [Unit]
(como visto com systemctl list-dependencies
). Idealmente, todos os serviços esperam até que o MySQL esteja em funcionamento:
vi /lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target network.service mysql.service
vi /lib/systemd/system/crond.service
[Unit]
Description=Command Scheduler
After=syslog.target auditd.service systemd-user-sessions.service time-sync.target network.service mysql.service
Ao inicializar com o descrito acima, recebo os mesmos erros. Também recebo os emails, mailq
pois a rede / DNS não está pronta ao processar scripts cron. Alguns minutos após a inicialização, eles são enviados corretamente.
Alguém pode ajudar a acertar isso certificando-se de que os serviços sejam disparados na ordem correta? Parece muito errado que ele seja inicializado tão rapidamente e, idealmente, foi feito da maneira antiga ", lançando um serviço ... espere ... inicie um novo serviço ... espere ... e assim por diante).
Observe que não tenho certeza se systemd
esse é o meu problema - é apenas minha teoria do que posso ler da rede.
/etc/default/rc*
Requires=network.target
às unidades acima.
Requires=network.target
em/lib/systemd/system/crond.service
grep -i concurrency /etc/default/rcS
? Eu posso estar misturando meus sistemas init, mas me lembro que controla se os processos esperam um pelo outro terminar.