Ich habe gerade ein Upgrade von CentOS 6.5 auf 7.0 durchgeführt und bin nicht sehr glücklich, da das neue systemdmir wahrscheinlich Probleme bereitet. Es scheint, als würde es einfach zu schnell booten, Prozesse asynchron starten und Dienstabhängigkeiten vermasseln.
Zum Beispiel habe ich einige Skripte eingerichtet, cronddie nach einem Neustart ausgelöst werden:
@reboot /root/scripts/check_gmail.sh
@reboot /root/scripts/start_gps_listener.sh
Dies führt zu allen möglichen seltsamen Fehlern (von denen nur einer angezeigt wird):
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)
Oben schreibe ich an einen TCP-Socket. Mir ist ziemlich klar, dass crondes gestartet wird, bevor das Netzwerk ordnungsgemäß als das initialisiert wird network is unreachable.
Das gleiche gilt für Apache und MySQL (MariaDB). MySQL startet nur sehr langsam (viele Daten), was bedeutet, dass sowohl Apache als auch viele meiner crondStartskripte fehlschlagen, da die MySQL-Datenbank beim Aufrufen der Skripte nicht ausgeführt wird.
Ich habe versucht, Abhängigkeiten einzurichten, aber ohne Glück; Ich habe angehängt networkund mysqlDienstleistungen an [Unit](wie mit gesehen systemctl list-dependencies). Im Idealfall warten alle Dienste, bis MySQL betriebsbereit ist:
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
Beim Booten mit den oben genannten bekomme ich die gleichen Fehler. Ich erhalte auch die E-Mails, mailqda das Netzwerk / DNS bei der Verarbeitung von Cron-Skripten nicht bereit ist. Einige Minuten nach dem Start werden sie korrekt gesendet.
Kann jemand helfen, dies richtig zu machen, indem er sicherstellt, dass die Dienste in der richtigen Reihenfolge ausgelöst werden? Es scheint sehr falsch zu sein, dass es so schnell bootet und im Idealfall auf die gute alte Art und Weise "einen Dienst starten ... warten ... einen neuen Dienst starten ... warten ... so weiter").
Beachten Sie, dass ich nicht sicher bin, ob dies systemdmein Problem ist - es ist nur meine Theorie dessen, was ich aus dem Netz lesen kann.
/etc/default/rc*
Requires=network.target, die oben genannten Einheiten zu ergänzen.
Requires=network.targetin/lib/systemd/system/crond.service
grep -i concurrency /etc/default/rcS? Ich vermische vielleicht meine Init-Systeme, aber ich erinnere mich, dass dies steuert, ob Prozesse aufeinander warten, bis sie abgeschlossen sind.