Jessie: lokales "Shutdown" script einbauen

Jörg Schulz jschulz at sgbs.de
Fri Jan 29 10:56:13 CET 2016


Am 28. Januar 2016 um 20:52 schrieb Stefan U. Hegner <stefan at hegner-online.de>:
> Am 28.01.2016 um 15:09 schrieb Jörg Schulz:
>> Auf jessie mit systemd werden die init.d/-Scripte von Hand evtl. gar
>> nicht ausgeführt.
> ... dafür spricht ja meine Erfahrung. Wobei die /etc/rc.local ja beim
> Boot läuft.

Das "evtl." war wohl etwas missverständlich.

Grundsätzlich gilt für eine Jessie Standardinstallation (mit systemd):
wenn Du von Hand ein init.d-Script aufrufst, dann werden die start-/stop-
Abschnitte in dem Script gar nicht ausgeführt, sondern ab ".
/lib/lsb/initfunctions"
auf systemd umgeleitet (systemctl start|stop|reload|... <service>). Was dann
passieren soll musst/kannst Du in den systemd-Unit-Files konfigurieren.

>> Das wird bereits in ". /lib/lsb/init-functions" abgefangen.
>> Versuch mal _SYSTEMCTL_SKIP_REDIRECT zu setzen.
>> Siehe: /lib/lsb/init-functions.d/40-systemd
> Hmmm, damit tue ich mich gerade etwas schwer zu verstehen, was Du mir
> sagen willst. Du spielst vermutlich auf diesen Code-Schnippsel an:
>
>         # Redirect SysV init scripts when executed by the user
>         if [ $PPID -ne 1 ] && [ -z "${init:-}" ] && [ -z "${_SYSTEMCTL_SKIP_REDIRECT:-}" ]; then
>             case $(readlink -f "$0") in
>                 /etc/init.d/*)
>                     _use_systemctl=1
>                     # Some services can't reload through the .service file,
>                     # but can through the init script.
>                     prog=${0##*/}
>                     service="${prog%.sh}.service"
>                     if [ "$(systemctl -p CanReload show $service 2>/dev/null)" = "CanReload=no" ] && [ "${1:-}" = "reload" ]; then
>                         _use_systemctl=0
>                     fi
>                     ;;
>             esac
>         else
>             export _SYSTEMCTL_SKIP_REDIRECT="true"
>         fi
>
> ... bloß erwischt Du mich da jenseits meiner Fähigkeiten zu verstehen,
> was das genau macht, bzw. wo ich am sinnigsten Die Variable
> _SYSTEMCTL_SKIP_REDIRECT setze, wenn das ist, was ich will.
> Stefan.

Ja, das Schnipsel meine ich. :-)

Setz mal in init.d/rc.local VOR das ". /lib/lsb/init-functions" z.B. ein
"_SYSTEMCTL_SKIP_REDIRECT=no". Wenn Du jetzt von Hand
"/etc/init.d/rc.local start" ausführst dann werden die start-/stop-Abschnitte
wieder ausgeführt.

Nur: das hilft Dir leider bei deinem ursprünglichen Problem nicht weiter.
Wenn Du den Rechner herunterfährst gibst Du ja nicht von Hand
"/etc/init.d/rc.local stop" ein und systemd macht das auch nicht.

Die entsprechende Unit-Datei um den systemd dazu zu bringen ist
/lib/systemd/system/rc-local.service. (rc.local.service ist ein symlink)
Dort erkennt man, dass es auch nur ein ExecStart gibt.
Was Du also brauchst ist ein "ExecStop" Und das gibt es auch :-)

Du solltest aber besser nicht das Original /lib/systemd/system/rc-local.service
verändern, sondern ein /etc/systemd/system/rc-local.service anlegen.
Dieses überschreibt dann das Original kompett. Wenn Du nur was ändern möchtest
(Du willst ja nur ein ExecStop hinzufügen) dann legst Du das Verzeichnis
/etc/systemd/system/rc-local.service.d/ an und legst dort z.B. eine
"my-rc-local-stop.conf"
an mit:
-----------------------
[Service]
ExecStop=/etc/rc.local stop
-----------------------
So bleibst das Original unangetastet und hast deine lokalen Änderungen
unter /etc.
Hab ich eben selbst getestet und funktioniert gut.

Das _SYSTEMCTL_SKIP_REDIRECT brauchst Du dann natürlich nicht mehr :-)

Grüße
Jörg

-- 

Schulz Gebäudeservice GmbH & Co. KG
Dr.-Max-Ilgner-Straße 17
32339 Espelkamp
Persönlich haftende Gesellschafterin:
Gebäudereinigung Joachim Schulz
Verwaltungsgesellschaft mbH
Telefon: +49 5772 9100 0
Telefax: +49 5772 9100 11
Email: zentrale at sgbs.de
Internet: www.sgbs.de
Geschäftsführer: Joachim und Dirk Schulz, Norbert Kosica
Handelsregister Bad Oeynhausen: HRA 5902, HRB 8591
UST-Id-Nr.: DE 125752702


More information about the Linux mailing list