Module: SdNotify
- Defined in:
- lib/sd_notify.rb
Overview
SdNotify is a pure-Ruby implementation of sd_notify(3). It can be used to notify systemd about state changes. Methods of this package are no-op on non-systemd systems (eg. Darwin).
The API maps closely to the original implementation of sd_notify(3), therefore be sure to check the official man pages prior to using SdNotify.
Defined Under Namespace
Classes: NotifyError
Constant Summary collapse
- READY =
"READY=1"
- RELOADING =
"RELOADING=1"
- STOPPING =
"STOPPING=1"
- STATUS =
"STATUS="
- ERRNO =
"ERRNO="
- MAINPID =
"MAINPID="
- WATCHDOG =
"WATCHDOG=1"
- FDSTORE =
"FDSTORE=1"
Class Method Summary collapse
- .errno(errno, unset_env = false) ⇒ Object
- .fdstore(unset_env = false) ⇒ Object
- .mainpid(pid, unset_env = false) ⇒ Object
-
.notify(state, unset_env = false) ⇒ Fixnum?
Notify systemd with the provided state, via the notification socket, if any.
- .ready(unset_env = false) ⇒ Object
- .reloading(unset_env = false) ⇒ Object
- .status(status, unset_env = false) ⇒ Object
- .stopping(unset_env = false) ⇒ Object
- .watchdog(unset_env = false) ⇒ Object
-
.watchdog? ⇒ Boolean
If the $WATCHDOG_USEC environment variable is set, and the $WATCHDOG_PID variable is unset or set to the PID of the current process.
Class Method Details
.errno(errno, unset_env = false) ⇒ Object
43 44 45 |
# File 'lib/sd_notify.rb', line 43 def self.errno(errno, unset_env=false) notify("#{ERRNO}#{errno}", unset_env) end |
.fdstore(unset_env = false) ⇒ Object
56 57 58 |
# File 'lib/sd_notify.rb', line 56 def self.fdstore(unset_env=false) notify(FDSTORE, unset_env) end |
.mainpid(pid, unset_env = false) ⇒ Object
48 49 50 |
# File 'lib/sd_notify.rb', line 48 def self.mainpid(pid, unset_env=false) notify("#{MAINPID}#{pid}", unset_env) end |
.notify(state, unset_env = false) ⇒ Fixnum?
Notify systemd with the provided state, via the notification socket, if any.
Generally this method will be used indirectly through the other methods of the library.
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/sd_notify.rb', line 104 def self.notify(state, unset_env=false) sock = ENV["NOTIFY_SOCKET"] return nil if !sock ENV.delete("NOTIFY_SOCKET") if unset_env connected = false begin sock = Addrinfo.unix(sock, :DGRAM).connect connected = true sock.close_on_exec = true sock.write(state) rescue StandardError => e raise NotifyError, "#{e.class}: #{e.}", e.backtrace ensure sock.close if connected end end |
.ready(unset_env = false) ⇒ Object
24 25 26 |
# File 'lib/sd_notify.rb', line 24 def self.ready(unset_env=false) notify(READY, unset_env) end |
.reloading(unset_env = false) ⇒ Object
28 29 30 |
# File 'lib/sd_notify.rb', line 28 def self.reloading(unset_env=false) notify(RELOADING, unset_env) end |
.status(status, unset_env = false) ⇒ Object
38 39 40 |
# File 'lib/sd_notify.rb', line 38 def self.status(status, unset_env=false) notify("#{STATUS}#{status}", unset_env) end |
.stopping(unset_env = false) ⇒ Object
32 33 34 |
# File 'lib/sd_notify.rb', line 32 def self.stopping(unset_env=false) notify(STOPPING, unset_env) end |
.watchdog(unset_env = false) ⇒ Object
52 53 54 |
# File 'lib/sd_notify.rb', line 52 def self.watchdog(unset_env=false) notify(WATCHDOG, unset_env) end |
.watchdog? ⇒ Boolean
Unlike sd_watchdog_enabled(3), this method does not mutate the environment.
If the $WATCHDOG_USEC environment variable is set, and the $WATCHDOG_PID variable is unset or set to the PID of the current process
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/sd_notify.rb', line 69 def self.watchdog? wd_usec = ENV["WATCHDOG_USEC"] wd_pid = ENV["WATCHDOG_PID"] return false if !wd_usec begin wd_usec = Integer(wd_usec) rescue return false end return false if wd_usec <= 0 return true if !wd_pid || wd_pid == $$.to_s false end |