summaryrefslogtreecommitdiffstats
path: root/virtual-programs/watchdog.folk
blob: 7316ba08527e5a0cd0751d742c7b0026c70f591b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# Temporarily disabling watchdog while we work out IPC.
return

if {$::isLaptop} { return }

On process "watchdog" {
    set ::lastPong [clock seconds]
    fconfigure stdin -blocking 0 -buffering line
    fileevent stdin readable {
        gets stdin line
        if {$line ne "pong"} { error "watchdog: Invalid return pong" }
        set ::lastPong [clock seconds]

        after 1000 { puts {expr {"pong"}} }
    }
    puts {expr {"pong"}}

    every 2500 {
        if {[clock seconds] - $::lastPong > 5} {
            puts stderr "watchdog: Did not hear pong, restarting."
            exec sudo systemctl restart folk
            exit 1
        }
    }

    vwait forever
}