module SdNotify
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
.
@see www.freedesktop.org/software/systemd/man/sd_notify.html
Constants
- ERRNO
- FDSTORE
- MAINPID
- READY
- RELOADING
- STATUS
- STOPPING
- WATCHDOG
Public Class Methods
@param errno [Integer]
# File lib/sd_notify.rb, line 45 def self.errno(errno, unset_env=false) notify("#{ERRNO}#{errno}", unset_env) end
# File lib/sd_notify.rb, line 58 def self.fdstore(unset_env=false) notify(FDSTORE, unset_env) end
@param pid [Integer]
# File lib/sd_notify.rb, line 50 def self.mainpid(pid, unset_env=false) notify("#{MAINPID}#{pid}", unset_env) end
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.
@param state [String] @param unset_env [Boolean]
@return [Fixnum, nil] the number of bytes written to the notification
socket or nil if there was no socket to report to (eg. the program wasn't started by systemd)
@raise [NotifyError] if there was an error communicating with the systemd
socket
@see www.freedesktop.org/software/systemd/man/sd_notify.html
# 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.message}", e.backtrace end end
# File lib/sd_notify.rb, line 26 def self.ready(unset_env=false) notify(READY, unset_env) end
# File lib/sd_notify.rb, line 30 def self.reloading(unset_env=false) notify(RELOADING, unset_env) end
@param status [String] a custom status string that describes the current
state of the service
# File lib/sd_notify.rb, line 40 def self.status(status, unset_env=false) notify("#{STATUS}#{status}", unset_env) end
# File lib/sd_notify.rb, line 34 def self.stopping(unset_env=false) notify(STOPPING, unset_env) end
# File lib/sd_notify.rb, line 54 def self.watchdog(unset_env=false) notify(WATCHDOG, unset_env) end
@param [Boolean] true if the service manager expects watchdog keep-alive
notification messages to be sent from this process.
If the $WATCHDOG_USEC environment variable is set, and the $WATCHDOG_PID variable is unset or set to the PID of the current process
@note Unlike sd_watchdog_enabled(3), this method does not mutate the
environment.
# 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