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
45 46 47 |
# File 'lib/sd_notify.rb', line 45 def self.errno(errno, unset_env=false) notify("#{ERRNO}#{errno}", unset_env) end |
.fdstore(unset_env = false) ⇒ Object
58 59 60 |
# File 'lib/sd_notify.rb', line 58 def self.fdstore(unset_env=false) notify(FDSTORE, unset_env) end |
.mainpid(pid, unset_env = false) ⇒ Object
50 51 52 |
# File 'lib/sd_notify.rb', line 50 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.
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/sd_notify.rb', line 106 def self.notify(state, unset_env=false) sock = ENV["NOTIFY_SOCKET"] return nil if !sock ENV.delete("NOTIFY_SOCKET") if unset_env begin Addrinfo.unix(sock, :DGRAM).connect do |s| s.close_on_exec = true s.write(state) end rescue StandardError => e raise NotifyError, "#{e.class}: #{e.}", e.backtrace end end |
.ready(unset_env = false) ⇒ Object
26 27 28 |
# File 'lib/sd_notify.rb', line 26 def self.ready(unset_env=false) notify(READY, unset_env) end |
.reloading(unset_env = false) ⇒ Object
30 31 32 |
# File 'lib/sd_notify.rb', line 30 def self.reloading(unset_env=false) notify(RELOADING, unset_env) end |
.status(status, unset_env = false) ⇒ Object
40 41 42 |
# File 'lib/sd_notify.rb', line 40 def self.status(status, unset_env=false) notify("#{STATUS}#{status}", unset_env) end |
.stopping(unset_env = false) ⇒ Object
34 35 36 |
# File 'lib/sd_notify.rb', line 34 def self.stopping(unset_env=false) notify(STOPPING, unset_env) end |
.watchdog(unset_env = false) ⇒ Object
54 55 56 |
# File 'lib/sd_notify.rb', line 54 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
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/sd_notify.rb', line 71 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 |