Răspunsul anterior (din păcate, acum șters) al unui utilizator util al cărui pseudonim mi-a scăpat deja din minte a fost aproape corect.
Acesta a sugerat modificarea /lib/systemd/system/apache2.service
fișier de care să depindă network-online.target
în loc de implicit reţea.ţintă
sau, mai bine, pentru a adăuga un al doilea fișier la /lib/systemd/system
numit my-apache2.service
cu această modificare. Conform documentației, aceasta este modalitatea corectă de a vă asigura că un serviciu pornește numai atunci când rețeaua este cu adevărat activată.
În timp ce acest lucru funcționează, problema aici este aceea continutul de /lib
nu trebuie să fie editate și /etc/systemd/system
ar trebui folosit în acest scop. (Da, acest răspuns pe care l-am legat se referă la alte sisteme decât Ubuntu, dar citind man 7 fişier-ierarhie
și man 5 systemd.unit
pe Ubuntu arată același lucru).
A doua problemă este că, din experiența mea, încercarea de a rula Apache2 de două ori duce la probleme.
Pentru a remedia ambele probleme, răspunsul meu a recomandat anterior crearea unui serviciu conflictual în /etc/systemd/system
. Cu toate acestea, acest lucru a fost prea complicat și nu a reușit să rezolve unele dintre problemele de mai sus, și anume nu a fost o dovadă viitoare: modificări la originalul .serviciu
fișierul realizat de autorii din amonte nu ar fi încorporat automat în noul nostru .serviciu
fişier.
Soluția corectă este să creați un fișier drop-in care adaugă unul nou După
dependență de original apache2.service
, după cum este documentat de man 5 systemd.unit
. Pentru a face acest lucru, trebuie să introduceți următoarea comandă:
# systemctl edit apache2.service
(care este documentat în om 1 systemctl
)
...și când se deschide editorul trebuie să introduceți următorul conținut între cel ### Orice între aici și comentariul de mai jos
... și ### Rânduri sub acest comentariu
... linii:
[Unitate]
După=network-online.target
Și salvați noul fișier.
Rețineți că conform man 5 systemd.unit
aceasta nu va înlocui dependențele originale ale serviciului After; mai degrabă, aceasta va adăuga o nouă dependență celor care sunt deja prezente.
Pentru referință, iată conținutul original al /lib/systemd/system/apache2.service
:
[Unitate]
Descriere=Serverul Apache HTTP
După=network.target remote-fs.target nss-lookup.target
Documentație=https://httpd.apache.org/docs/2.4/
[Serviciu]
Tip = bifurcare
Mediu=APACHE_STARTED_BY_SYSTEMD=adevărat
ExecStart=/usr/sbin/apachectl start
ExecStop=/usr/sbin/apachectl graceful-stop
ExecReload=/usr/sbin/apachectl grațios
KillMode=mixt
PrivateTmp=adevărat
Restart=la anulare
[Instalare]
WantedBy=multi-user.target
De acum înainte, Apache2 nu ar trebui să mai eșueze să pornească la pornirea sistemului.