คำตอบก่อนหน้า (น่าเศร้าที่ตอนนี้ถูกลบไปแล้ว) โดยผู้ใช้ที่เป็นประโยชน์ซึ่งมีนิคทำให้ใจฉันหลุดไปแล้ว เกือบ ถูกต้อง.
ได้เสนอแนะให้แก้ไข /lib/systemd/system/apache2.service
ไฟล์ที่จะทำให้มันขึ้นอยู่กับ network-online.target
แทนค่าเริ่มต้น เครือข่าย.target
หรือดีกว่าที่จะเพิ่มไฟล์ที่สองเข้าไป /lib/systemd/ระบบ
เรียกว่า my-apache2.service
ด้วยการปรับเปลี่ยนนี้ ตามเอกสารนี้เป็นวิธีที่ถูกต้องเพื่อให้แน่ใจว่าบริการจะเริ่มต้นเมื่อเครือข่ายใช้งานได้จริงเท่านั้น.
ในขณะที่สิ่งนี้ใช้งานได้ปัญหาก็คือ เนื้อหาของ /lib
ไม่ควรแก้ไขและ /etc/systemd/ระบบ
ควรใช้เพื่อการนี้แทน (ใช่ คำตอบนี้ฉันเชื่อมโยงกับข้อตกลงกับระบบอื่นที่ไม่ใช่ Ubuntu แต่กำลังอ่านอยู่ man 7 ลำดับชั้นของไฟล์
และ คนที่ 5 systemd.unit
บน Ubuntu แสดงสิ่งเดียวกัน)
ปัญหาที่สองคือจากประสบการณ์ของฉัน การพยายามเรียกใช้ Apache2 สองครั้งทำให้เกิดปัญหา
เพื่อแก้ไขปัญหาทั้งสองคำตอบของฉันก่อนหน้านี้แนะนำให้สร้างบริการที่ขัดแย้งกัน /etc/systemd/ระบบ
. อย่างไรก็ตาม สิ่งนี้ซับซ้อนเกินไปและล้มเหลวในการแก้ปัญหาบางอย่างข้างต้น กล่าวคือ มันไม่ใช่ข้อพิสูจน์ในอนาคต: การเปลี่ยนแปลงสู่สิ่งเดิม .บริการ
ไฟล์ที่สร้างโดยผู้เขียนต้นน้ำจะไม่รวมอยู่ในไฟล์ใหม่ของเราโดยอัตโนมัติ .บริการ
ไฟล์.
วิธีแก้ไขที่ถูกต้องคือสร้างไฟล์ดรอปอินที่เพิ่มไฟล์ใหม่ หลังจาก
การพึ่งพาสิ่งเดิม apache2.service
ดังเอกสารโดย คนที่ 5 systemd.unit
. ในการทำเช่นนั้นจำเป็นต้องป้อนคำสั่งต่อไปนี้:
# systemctl แก้ไข apache2.service
(ซึ่งบันทึกไว้ใน ผู้ชาย 1 ระบบctl
)
...และเมื่อตัวแก้ไขเปิดขึ้นมาจำเป็นต้องป้อนเนื้อหาต่อไปนี้ ระหว่าง เดอะ ### อะไรก็ได้ระหว่างที่นี่และความคิดเห็นด้านล่าง
... และ ###บรรทัดใต้คอมเม้นนี้
... บรรทัด:
[หน่วย]
After=network-online.target
และบันทึกไฟล์ใหม่
โปรดทราบว่าตาม คนที่ 5 systemd.unit
สิ่งนี้จะไม่แทนที่การพึ่งพาบริการเดิมหลังจากพึ่งพา; แต่จะเป็นการเพิ่มการพึ่งพาใหม่ให้กับสิ่งที่มีอยู่แล้ว
สำหรับการอ้างอิง นี่คือเนื้อหาต้นฉบับของ /lib/systemd/system/apache2.service
:
[หน่วย]
คำอธิบาย=เซิร์ฟเวอร์ Apache HTTP
After=network.target remote-fs.target nss-lookup.target
เอกสาร=https://httpd.apache.org/docs/2.4/
[บริการ]
ประเภท = ส้อม
สภาพแวดล้อม=APACHE_STARTED_BY_SYSTEMD=จริง
ExecStart=/usr/sbin/apachectl start
ExecStop=/usr/sbin/apachectl หยุดอย่างสง่างาม
ExecReload=/usr/sbin/apachectl สง่างาม
KillMode=ผสม
PrivateTmp=จริง
เริ่มต้นใหม่ = เมื่อยกเลิก
[ติดตั้ง]
WantedBy=multi-user.target
จากนี้ไป Apache2 ไม่ควรล้มเหลวในการเริ่มระบบอีกต่อไป