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

Copyright(c) Romain Gérard, 2014 David Fisher, 2013
LicenseBSD3
Maintainerromain.gerard@erebe.eu
Stabilityexperimental
PortabilityRequire Systemd or will fail otherwise
Safe HaskellNone
LanguageHaskell2010

System.Systemd.Daemon

Contents

Description

Implementation of Systemd facilities to create and manage daemons.

This module contains socket activation and notify tools. See

Example:

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

main :: IO ()
main = forever $ do
        functionThatMayHang
        notifyWatchdog

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

[Unit]
Description=MyDaemon

[Service]
Type=simple
TimeoutStartSec=0
ExecStart=AbsolutePathToMyExecutable
WatchdogSec=60
Restart=on-failure

[Install]
WantedBy=multi-user.target

Synopsis

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

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

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).

Utils

unsetEnvironnement :: IO () Source

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