No, it really shouldn't detect "started by systemd" at all. These are several independent things and you shouldn't mix them all together.
Regarding startup, systemd services have several distinct Type= settings with different expectations and the program has no way to reliably detect which one is configured. And other init systems exist which also support handling non-forking services. For example, OpenRC can just as well start services that don't fork/demonize, and it even supports the systemd-style "Type=notify" nowadays. So you shouldn't have a "systemd" mode, but rather have a "--(no-)daemon" or "--(no-)fork" or "--foreground" option that describes the behavior expected. If Type=notify is offered, this can be detected from the specific $NOTIFY_SOCKET, again separately from which init system is offering it. On Mon, Jun 30, 2025, 13:26 Stef Bon <stef...@gmail.com> wrote: > Hi, > > it's important for a program to detect it has been started by systemd. > For example it does not have to fork since it has already been forked. > > I've written a test script, which calls env, and there are a few > unique environment variables which are an indication it has been > started by systemd: SYSTEMD_EXEC_PID and INVOCATION_ID. > > Is it a good way to test these environment vars (to detect started by > systemd) or is there a better way? > > S. Bon >