Je viens de passer de CentOS 6.5 à 7.0 et je ne suis pas trop content car le nouveau systemd
me pose probablement des problèmes. Il semble qu'il démarre simplement trop vite, démarre des processus de manière asynchrone et fout les dépendances de service.
Par exemple, j'ai quelques scripts de configuration dans crond
lesquels sont déclenchés après un redémarrage:
@reboot /root/scripts/check_gmail.sh
@reboot /root/scripts/start_gps_listener.sh
Il en résulte toutes sortes d'erreurs étranges (ne montrant qu'une seule d'entre elles):
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)
Dans ce qui précède, j'écris sur un socket TCP. Il est assez clair pour moi que cela crond
démarre avant que le réseau ne soit correctement initialisé en tant que network is unreachable
.
La même chose va avec Apache et MySQL (MariaDB). MySQL est assez lent au démarrage (beaucoup de données), ce qui signifie qu'Apache et beaucoup de mes crond
scripts de démarrage échouent car la base de données MySQL ne fonctionne pas lors de l'appel des scripts.
J'ai essayé de configurer des dépendances mais sans aucune chance; J'ai annexé network
et mysql
services à [Unit]
(comme vu avec systemctl list-dependencies
). Idéalement, tous les services attendent que MySQL soit opérationnel:
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
Lors du démarrage avec ce qui précède, j'obtiens les mêmes erreurs. Je reçois également les e-mails mailq
car le réseau / DNS n'est pas prêt lors du traitement des cron-scripts. Quelques minutes après le démarrage, ils sont envoyés correctement.
Quelqu'un peut-il aider à bien faire les choses en s'assurant que les services sont lancés dans le bon ordre? Il semble très erroné que le démarrage soit si rapide et, idéalement, il l'a fait à l'ancienne: "lancement d'un service ... attendez ... lancez un nouveau service ... attendez ... ainsi de suite).
Notez que je ne suis pas sûr systemd
que ce soit mon problème - c'est juste ma théorie de ce que je peux lire sur le net.
/etc/default/rc*
Requires=network.target
aux unités ci-dessus.
Requires=network.target
dans/lib/systemd/system/crond.service
grep -i concurrency /etc/default/rcS
? Je suis peut-être en train de mélanger mes systèmes d'initialisation, mais je semble me rappeler que contrôle si les processus attendent la fin les uns des autres.