Saya baru saja memutakhirkan dari CentOS 6.5 ke 7.0 dan saya tidak terlalu senang karena yang baru systemdmungkin memberi saya masalah. Sepertinya itu hanya boot terlalu cepat, memulai proses secara tidak sinkron dan mengacaukan dependensi layanan.
Misalnya saya memiliki beberapa pengaturan skrip crondyang dipicu setelah reboot:
@reboot /root/scripts/check_gmail.sh
@reboot /root/scripts/start_gps_listener.sh
Ini menghasilkan semua jenis kesalahan aneh (hanya menunjukkan salah satunya):
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)
Di atas saya menulis ke soket TCP. Cukup jelas bagi saya bahwa cronddimulai sebelum jaringan diinisialisasi dengan benar sebagai network is unreachable.
Hal yang sama berlaku dengan Apache dan MySQL (MariaDB). MySQL cukup lambat untuk startup (banyak data) yang berarti bahwa baik Apache dan banyak crondskrip startup saya gagal karena database MySQL tidak berjalan ketika skrip dipanggil.
Saya telah mencoba mengatur dependensi tetapi tidak berhasil; Saya telah menambahkan networkdan mysqllayanan ke [Unit](seperti yang terlihat dengan systemctl list-dependencies). Idealnya semua layanan menunggu hingga MySQL aktif dan berjalan:
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
Saat boot dengan yang di atas saya mendapatkan kesalahan yang sama. Saya juga menerima surel mailqkarena jaringan / DNS tidak siap ketika memproses skrip-skrip. Beberapa menit setelah startup mereka dikirim dengan benar.
Adakah yang bisa membantu memperbaiki ini dengan memastikan layanan dipecat dalam urutan yang benar? Tampaknya sangat salah bahwa ini adalah boot yang sangat cepat dan idealnya melakukannya dengan cara lama yang baik, "meluncurkan satu serice ... tunggu ... meluncurkan layanan baru ... tunggu ... seterusnya).
Perhatikan bahwa saya tidak yakin itu adalah systemdmasalah saya - itu hanya teori saya tentang apa yang bisa saya baca dari internet.
/etc/default/rc*
Requires=network.targetke unit di atas.
Requires=network.targetke/lib/systemd/system/crond.service
grep -i concurrency /etc/default/rcS? Saya mungkin mencampur sistem init saya, tetapi saya sepertinya ingat bahwa mengontrol apakah proses menunggu satu sama lain untuk menyelesaikan.