systemd-1.1.0: Systemd facilities (Socket activation, Notify)

Copyright(c) Romain Gérard 2014
David Fisher 2013
PortabilityRequire Systemd or will fail otherwise
Safe HaskellNone




Implementation of Systemd facilities to create and manage daemons.

This module contains socket activation and notify tools. See


import Control.Monad(forever)
import System.Systemd.Daemon(notifyWatchdog)

main :: IO ()
main = forever $ do

If you use the service described as below, Systemd will restart your program each time the watchdog fail to notify itself under 60 sec.





Notify functions

notify :: Bool -> String -> IO (Maybe ()) Source #

Notify systemd about an event After notifying systemd the Bool parameter specify if the environnement shall be unset (Further call to notify will fail) The String is the event to pass Returns Nothing if the program was not started with systemd or that the environnement was previously unset

notifyWithFD :: Bool -> String -> Socket -> IO (Maybe ()) Source #

Same as notify but send a long a socket to be stored It is up to the caller to properly set the message (i.e: do not forget to set FDSTORE=1)

storeFd :: Bool -> Socket -> IO (Maybe ()) Source #

Notify systemd to store a socket for us To be used along getActivatedSockets during a restart usefull for zero downtime restart

storeFdWithName :: Bool -> Socket -> String -> IO (Maybe ()) Source #

Notify systemd to store a socket for us and specify a name To be used along getActivatedSocketsWithNames during a restart usefull for zero downtime restart

notifyWatchdog :: IO (Maybe ()) Source #

Notify the watchdog that the program is still alive

notifyReady :: IO (Maybe ()) Source #

Notify the systemd that the program is ready

notifyPID :: CPid -> IO (Maybe ()) Source #

Notify systemd of the PID of the program (for after a fork)

notifyErrno :: Errno -> IO (Maybe ()) Source #

Notify systemd of an Errno error

notifyStatus :: String -> IO (Maybe ()) Source #

Notify systemd of the status of the program. An arbitrary String can be passed

notifyBusError :: String -> IO (Maybe ()) Source #

Notify systemd of a DBUS error like. Correct formatting of the String is left to the caller

notifyReloading :: IO (Maybe ()) Source #

Notify systemd that the service is reloading its configuration

notifyStopping :: IO (Maybe ()) Source #

Notify systemd that the service is beginning its shutdown

Socket activation functions

getActivatedSockets :: IO (Maybe [Socket]) Source #

Return a list of activated sockets, if the program was started with socket activation. The sockets are in the same order as in the associated .socket file. The sockets will have their family, type, and status set appropriately. Returns Nothing in systems without socket activation (or when the program was not socket activated).

getActivatedSocketsWithNames :: IO (Maybe [(Socket, String)]) Source #

Same as getActivatedSockets but return also the name associated with those sockets if storeFdWithName was used. IF storeFd was used to transmit the socket to systemd, the name will be a generic one (i.e: usally "stored")


unsetEnvironnement :: IO () Source #

Unset all environnement variable related to Systemd. Calls to notify like and getActivatedSockets functions will return Nothing after that