| Copyright | (c) Romain Gérard, 2014 David Fisher, 2013 |
|---|---|
| License | BSD3 |
| Maintainer | romain.gerard@erebe.eu |
| Stability | experimental |
| Portability | Require Systemd or will fail otherwise |
| Safe Haskell | None |
| Language | Haskell2010 |
System.Systemd.Daemon
Description
Implementation of Systemd facilities to create and manage daemons.
This module contains socket activation and notify tools. See
- http://0pointer.de/blog/projects/socket-activation.html
- http://www.freedesktop.org/software/systemd/man/systemd.socket.html
- http://www.freedesktop.org/software/systemd/man/systemd.service.html
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
- notify :: Bool -> String -> IO (Maybe ())
- notifyWatchdog :: IO (Maybe ())
- notifyReady :: IO (Maybe ())
- notifyPID :: CPid -> IO (Maybe ())
- notifyErrno :: Errno -> IO (Maybe ())
- notifyStatus :: String -> IO (Maybe ())
- notifyBusError :: String -> IO (Maybe ())
- getActivatedSockets :: IO (Maybe [Socket])
- unsetEnvironnement :: IO ()
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)
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