मैंने अभी सेंटोस 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)
ऊपर में मैं एक टीसीपी सॉकेट लिख रहा हूं। यह मेरे लिए बहुत स्पष्ट है कि 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 तैयार नहीं होता है। स्टार्टअप के कुछ मिनट बाद उन्हें सही तरीके से भेजा जाता है।
क्या कोई यह सुनिश्चित करने में मदद कर सकता है कि सेवाओं को सही क्रम में निकाल दिया गया है? यह बहुत गलत लगता है कि यह बहुत तेज़ बूटिंग है और आदर्श रूप से यह अच्छा पुराना तरीका है, "एक सेरिस को लॉन्च करना ... प्रतीक्षा करना ... एक नई सेवा शुरू करना ... प्रतीक्षा करना ... इत्यादि।"
ध्यान दें कि मुझे यकीन नहीं है systemd
कि यह मेरी समस्या है - यह सिर्फ मेरा सिद्धांत है कि मैं नेट से क्या पढ़ सकता हूं।
/etc/default/rc*
Requires=network.target
उपरोक्त इकाइयों को जोड़ने का प्रयास करें ।
Requires=network.target
करने के लिए/lib/systemd/system/crond.service
grep -i concurrency /etc/default/rcS
? मैं अपने init सिस्टम को मिक्स कर सकता हूं, लेकिन मुझे याद है कि यह नियंत्रित करता है कि क्या प्रक्रियाएं एक दूसरे के खत्म होने का इंतजार करती हैं।