[systemd-devel] Reload simple

Ferenc Wágner wferi at niif.hu
Fri Oct 27 12:30:58 UTC 2023


Andy Pieters <systemd at andypieters.me.uk> writes:

> Is there a good way to send a usr1 signal upon reload of a service
> with type=simple?
>
> I don't really want to do KILL USR1 $(pidof process) as that could
> pull other processes with similar names / instances.

Use $MAINPID as per man systemd.service:

ExecReload=
    Commands to execute to trigger a configuration reload in the service. This argument takes
    multiple command lines, following the same scheme as described for ExecStart= above. Use
    of this setting is optional. Specifier and environment variable substitution is supported
    here following the same scheme as for ExecStart=.

    One additional, special environment variable is set: if known, $MAINPID is set to the
    main process of the daemon, and may be used for command lines like the following:

        ExecReload=kill -HUP $MAINPID

    Note however that reloading a daemon by sending a signal (as with the example line above)
    is usually not a good choice, because this is an asynchronous operation and hence not
    suitable to order reloads of multiple services against each other. It is strongly
    recommended to set ExecReload= to a command that not only triggers a configuration reload
    of the daemon, but also synchronously waits for it to complete. For example, dbus-
    broker(1) uses the following:

        ExecReload=busctl call org.freedesktop.DBus \
                /org/freedesktop/DBus org.freedesktop.DBus \
                ReloadConfig
-- 
Feri.


More information about the systemd-devel mailing list