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