Ganz zufällig habe ich heute bemerkt, dass meine varlog-Service-Unit nix gescheites (um nicht Mist zu sagen) macht .... und seit Stunden komme ich nicht dahinter, warum das so ist Der Job ist eigentlich nicht sonderlich kompliziert und schnell erklärt: ein Script soll in der Boot-Phase /var/log auf ein HD-Verzeichnis mounten, und zwar bevor das Journal läuft.
Verkürzt auf den wichtigen Kern sieht das Script wie folgt aus:
Code: Alles auswählen
NewVarLogDir="/media/var/$HOSTNAME/log"
case $action in
start)
if [ -z "$(grep /var/log /proc/mounts)" ]; then # already mounted?
[ -d /var/TrueLogDir ] || mkdir -p /var/TrueLogDir
chmod 755 /var/TrueLogDir; chown root:root /var/TrueLogDir
mount --bind /var/log /var/TrueLogDir
mount --bind $NewVarLogDir /var/log
chmod 755 /var/log; chown root:root /var/log
cp -Rpu /var/TrueLogDir /var/log >/dev/null 2>&1
fi
;;
exit 0
2. über-mounten von /var/log durch Harddisk-Dir
3. kopieren des "geretteten" Inhaltes von /var/log auf das neue Harddisk->/var/log
Gestartet wird das Script via Service-Unit:
Code: Alles auswählen
[Unit]
Description=Start/stop logfile saving, redirect to HardDisk or tmpfs
Before=systemd-journald-dev-log.socket umount.target shutdown.target
Conflicts=shutdown.target
[Service]
Type=forking
Restart=no
TimeoutSec=5min
KillMode=process
RemainAfterExit=yes
ExecStart=/usr/local/bin/varlog start
ExecStop=/usr/local/bin/varlog stop
[Install]
WantedBy=multi-user.target
Code: Alles auswählen
journalctl --header | grep "File Path\|state" -i
File Path: /run/log/journal/078b3b81f451482fbdd572b3b015e2e5/system.journal
State: ONLINE
File Path: /var/log/journal/078b3b81f451482fbdd572b3b015e2e5/system.journal
State: OFFLINE
Interessant ist noch dieser Effekt, zur Laufzeit (bei diesen falschen Gegebenheiten) ein Restart des Journals....
Code: Alles auswählen
systemctl restart systemd-journald
journalctl --header | grep "File Path\|state" -i
File Path: /var/log/journal/078b3b81f451482fbdd572b3b015e2e5/system.journal
State: ONLINE