[systemd-devel] How to properly reboot the system from a service specified by `systemd.unit=` boot option?

Qu Wenruo wqu at suse.com
Wed Jan 1 06:55:02 UTC 2025


[BACKGROUND]
I'm trying to implement a super simple kdump service(s) for Archlinux.

The idea is super simple, just use the default linux kernel installed as 
kernel/initramfs for the kexec environment.

So there is a kexec.service to setup the environment, with extra systemd 
options to disable th kexec.service itself, and start the kdump.service:

```
[Unit]
Description=Setup kexec environment
After=local-fs.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/bin/kexec -p /boot/vmlinuz-linux 
--initrd=/boot/initramfs-linux.img --append="root=/dev/os/root rw 
console=ttyS0 nr_cpus=1 reset_devices systemd.mask=kexec.service 
systemd.unit=kdump.service"
ExecStop=/usr/bin/kexec -p -u

[Install]
WantedBy=multi-user.target
```

So that after a crash we can boot into the same kernel/initramfs combo 
and do whatever to collect the vmcore.

The kdump.service will just call makedumpfile and exit (hopefully also 
reboot the system):

```
[Unit]
Description=Save the kernel crash dump after a crash
After=multi-user.target

[Service]
Type=idle
ExecStart=/bin/sh -c 'mkdir -p /var/crash/ && /usr/bin/makedumpfile -z 
-d 31 /proc/vmcore "/var/crash/crashdump-$$(date +%%F-%%T)"'
ExecStartPost=reboot
UMask=0077
StandardInput=tty-force
StandardOutput=inherit
StandardError=inherit
```

[PROBLEM]
The vmcore collection happens well, but reboot failed:

```
Failed to connect to system scope bus via local transport: No such file 
or directory
```

Then the system hang and I have to force reboot the VM instead.

So any idea what's the proper way to reboot the system inside a service 
triggered by `systemd.unit=` boot option?

Thanks,
Qu


More information about the systemd-devel mailing list