Saya baru saja memutakhirkan dari CentOS 6.5 ke 7.0 dan saya tidak terlalu senang karena yang baru systemd
mungkin memberi saya masalah. Sepertinya itu hanya boot terlalu cepat, memulai proses secara tidak sinkron dan mengacaukan dependensi layanan.
Misalnya saya memiliki beberapa pengaturan skrip crond
yang 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 crond
dimulai 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 crond
skrip startup saya gagal karena database MySQL tidak berjalan ketika skrip dipanggil.
Saya telah mencoba mengatur dependensi tetapi tidak berhasil; Saya telah menambahkan network
dan mysql
layanan 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 mailq
karena 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 systemd
masalah saya - itu hanya teori saya tentang apa yang bisa saya baca dari internet.
/etc/default/rc*
Requires=network.target
ke unit di atas.
Requires=network.target
ke/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.