systemd: modyfikacja jednostek
W życiu zachodzi czasem potrzeba modyfikacji skryptów startowych (jednostek systemd). Co jeśli mamy jakiś niepełnosprawny program i chcemy opóźnić jego uruchomienie, a nie możemy tego wyrazić poprawnymi zależnościami?
Systemowe (dostarczane przez dystrybucję) skrypty startowe
znajdują się w /lib/systemd/system
. Administrator
nie powinienen ich ruszać, za to może przesłonić skrypt systemowy
swoim, umieszczając go w /etc/systemd/system
.
Skrypt z /lib
wygląda następująco:
[Unit] Description=uses CDP / LLDP frames to inform switches about connected hosts Requires=network.target [Service] EnvironmentFile=/etc/sysconfig/ladvd ExecStart=/usr/sbin/ladvd -f $LADVD_OPTIONS PIDFile=/var/run/ladvd.pid StandardOutput=syslog [Install] WantedBy=multi-user.target
Przepisywanie całości jest niezdrowe, dużo roboty i możliwe rozjechanie
gdy aktualizacja zmieni systemową jednostkę. W takich sytucjach najlepiej
posłużyć się dyrektywą .include
:
.include /lib/systemd/system/ladvd.service [Service] ExecStartPre=/bin/sleep 20s [Install] WantedBy=multi-user.target
Pierwsza linijka zaciąga całą treść oryginalnej jednostki. Sekcja
[Service]
wprowadza interesującą nas zmianę. Końcowka
jest potrzebna do korzystania z systemctl enable/disable
.
Inny przykład: dodanie zależności, wpływa na kolejność startu. Tworzymy /etc/systemd/system/radvd.service
z zawartością:
.include /lib/systemd/system/radvd.service [Unit] After=aiccu.service
Comments
Comments powered by Disqus