ฉันเพิ่งอัพเกรดจาก CentOS 6.5 เป็น 7.0 และฉันไม่ได้มีความสุขเกินไปเพราะใหม่systemd
อาจทำให้ฉันมีปัญหา ดูเหมือนว่ามันเป็นเพียงการบูทที่เร็วเกินไปเริ่มต้นกระบวนการแบบอะซิงโครนัสและทำให้การพึ่งพาบริการขึ้น
ตัวอย่างเช่นฉันมีการตั้งค่าสคริปต์บางอย่างcrond
ที่จะถูกเรียกหลังจากรีบูต:
@reboot /root/scripts/check_gmail.sh
@reboot /root/scripts/start_gps_listener.sh
ซึ่งส่งผลให้เกิดข้อผิดพลาดแปลก ๆ ทุกประเภท (แสดงเพียงหนึ่งรายการ):
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)
ในข้างต้นฉันเขียนถึงซ็อกเก็ต TCP มันสวยชัดเจนกับผมว่าจะเริ่มต้นก่อนที่เครือข่ายจะเริ่มต้นได้อย่างถูกต้องเป็นcrond
network is unreachable
สิ่งเดียวกันกับ Apache และ MySQL (MariaDB) MySQL ค่อนข้างช้าในการเริ่มต้น (ข้อมูลจำนวนมาก) หมายความว่าทั้ง Apache และcrond
สคริปต์เริ่มต้นของฉันล้มเหลวเนื่องจากฐานข้อมูล MySQL ไม่ทำงานเมื่อสคริปต์ถูกเรียกใช้
ฉันพยายามตั้งค่าการพึ่งพา แต่ไม่มีโชค ฉันได้ต่อท้ายnetwork
และmysql
บริการเพื่อ[Unit]
(เท่าที่เห็นด้วยsystemctl list-dependencies
) บริการทั้งหมดจะรอจนกว่า MySQL จะพร้อมใช้งาน:
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
เมื่อบู๊ตด้วยข้อมูลข้างต้นฉันได้รับข้อผิดพลาดเดียวกัน ฉันยังได้รับอีเมลmailq
เนื่องจากเครือข่าย / DNS ไม่พร้อมเมื่อประมวลผลสคริปต์ cron ไม่กี่นาทีหลังจากเริ่มต้นพวกเขาจะถูกส่งอย่างถูกต้อง
ทุกคนสามารถช่วยให้ได้รับสิทธินี้ด้วยการทำให้แน่ใจว่ามีการให้บริการตามลำดับที่ถูกต้อง? ดูเหมือนว่าผิดมากที่เป็นการบูทที่รวดเร็วและเป็นการดีที่ทำแบบเก่า "เปิดตัวเซริสหนึ่ง ... รอ ... เปิดตัวบริการใหม่ ... รอ ... ต่อไป)
โปรดทราบว่าฉันไม่แน่ใจsystemd
ว่าเป็นปัญหาของฉัน - มันเป็นเพียงทฤษฎีของฉันในสิ่งที่ฉันสามารถอ่านได้จากอินเทอร์เน็ต
/etc/default/rc*
Requires=network.target
ลงในหน่วยงานด้านบน
Requires=network.target
ใน/lib/systemd/system/crond.service
grep -i concurrency /etc/default/rcS
? ฉันอาจจะสับสนกับระบบเริ่มต้นของฉัน แต่ดูเหมือนว่าฉันจะจำได้ว่าการควบคุมนั้นกระบวนการจะรอให้กระบวนการอื่นเสร็จสิ้นหรือไม่