-
-
Save AoJ/0107cdd2ffce589ebdb1ac31fad9c4df 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