Created
June 5, 2018 23:18
-
-
Save hacst/ee12cd91167aa55b19444fc74c91a8e8 to your computer and use it in GitHub Desktop.
Basic Systemd sd_notify + watchdog usage
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cmake_minimum_required(VERSION 2.8) | |
project(sdnotify) | |
add_executable(sdnotify sdnotify.cpp) | |
target_link_libraries(sdnotify PUBLIC systemd) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <systemd/sd-daemon.h> | |
#include <stdio.h> | |
#include <unistd.h> | |
int main() | |
{ | |
setbuf(stdout, NULL); | |
uint64_t watchdogIntervalInUs; | |
const bool watchdog = sd_watchdog_enabled(0, &watchdogIntervalInUs) > 0; // Service WatchdogSec must be set for this to return > 0 | |
if (watchdog) { | |
printf("Watchdog is enabled with %lu us\n", watchdogIntervalInUs); | |
} else { | |
printf("Not running in a watchdog env\n"); | |
return 1; | |
} | |
// To be able to use sd_notify at all have to set service NotifyAccess (e.g. to main) | |
sd_notify(0, "READY=1"); // If service Type=notify the service is only considered ready once we send this (this is independent of watchdog capability) | |
printf("Notified as ready. Now sleeping with watchdog\n"); | |
//usleep(watchdogIntervalInUs * 2); // Should get the process killed | |
int i = 0; | |
while(true) { | |
usleep(watchdogIntervalInUs / 2); // Recommended reporting interval is half the watchdog interval | |
sd_notify(0, "WATCHDOG=1"); | |
sd_notifyf(0, "STATUS=Watchdog notify count %d", i); // Visible in systemctl status | |
++i; | |
} | |
return 0; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[Unit] | |
Description=Just a test for watchdogs etc | |
[Service] | |
ExecStart=/path/to/binary/sdnotify | |
Type=notify | |
NotifyAccess=main | |
WatchdogSec=5s | |
Restart=on-failure |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Good example, thanks.