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.
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./etc/default/rc*
Requires=network.target
aux unités ci-dessus.Requires=network.target
dans/lib/systemd/system/crond.service
Réponses:
Après beaucoup plus de lecture, j'ai trouvé la solution qui me convient.
J'ai lu ce guide, Exécution des services une fois le réseau activé . Une petite citation du guide:
C'est exactement ce que je voulais, j'ai donc activé ce service et défini la règle de dépendance dans le fichier de service pour
crond
:Comme il
mysqld
est toujours basé sur l'ancien dontinit.d
j'avais besoin pour créer unsystemd
service comme suggéré ici, l' activation de systemctl diffère du démarrage de systemctl :Et enfin, configurez le service Apache pour démarrer après MySQL:
Cela fonctionne pour moi au moins.
J'ai utilisé ces commandes pour vérifier ensuite où je peux clairement voir que le réseau est démarré avant au moins MySQL et Apache. Je ne peux cependant pas voir
crond
nulle part mais je peux voir que cela fonctionne dans mes scripts:Quelques autres commandes utiles que j'ai utilisées sont:
Si quelqu'un peut voir une meilleure façon de procéder, veuillez partager.
la source
systemd-analyze critical-chain
. Non seulement je vais l'utiliser souvent, mais je suis soudainement vendusystemd
. Merci!