pingkeeper

Crate GPLv3 license MSRV Safety Dance Build Status Release Date Stability stable

Command line application that monitorizes the exit status of a check command and, in case of failure, runs another main command. Optionally it can monitor that the provided main command is permanently running, triggering a restart (kill & run) if check command fails.

Primarily intended for checking if network is reachable (direct tcp connection or ping), current releases can do much more with the addition of custom check and kill commands.

Proudly made from Barcelona with Rust 🦀.

How does it work?

Flow Chart

Installation

Three options:

Cargo & Go

  1. If you already have cargo installed, use:

    cargo install pingkeeper
    

Manual download

  1. Download release binaries from releases page.

  2. Check the integrity of the downloaded file (version may differ):

    sha512sum --check pingkeeper-macos-v3.2.0.tar.gz.sha512
    

    It should say: pingkeeper-macos-v3.2.0.tar.gz: OK

  3. Extract archive (version may differ) with:

    tar xvf pingkeeper-macos-v3.2.0.tar.gz
    
  4. Check the integrity of the binary file with:

    sha512sum --check pingkeeper.sha512
    

    It should say: pingkeeper: OK

  5. Copy pingkeeper binary file to somewhere within your $PATH, ie: /usr/local/bin.

Build it yourself

This requires the stable version of rust & cargo installed. Visit Rust website for more information.

  1. Run this command:

    cargo build --release
    
  2. You will find your executable at ./target/release/pingkeeper.

Usage

Usage examples

Usage manual

Help available running pingkeeper --help:

```

USAGE: pingkeeper [FLAGS] [OPTIONS]

FLAGS: -h, --help Prints help information

-k, --keep-alive
        Keep <COMMAND> alive.

        Run <COMMAND> on start, also restart it when it dies.
-q, --quiet
        Do not output anything from <COMMAND> output, also reduces `-v` by one

-P, --use-ping
        Use `ping` to check connection.

        Use system's `ping` command to check network connection.
-V, --version
        Prints version information

-v
        Verbosity, -v -vv -vvv.

        Log levels: 0 = error, 1 = warning, 2 = info, 3 = debug.

OPTIONS: --check-cmd Use custom command to check

        Check network or something else. This will trigger the execution / kill flow as if it was a network check.
        Example: --check-cmd "cat canary.txt"
-H, --hosts <hosts>
        Space separated list of addresses or hosts (ping).

        For direct connection: List of IPv4 and IPv6, with or without port.

        For ping: List of hosts.

        Order does not matter, list will be shuffled. [default: 8.8.8.8 8.8.6.6 1.1.1.1 1.0.0.1]
    --kill-cmd <kill-cmd>
        Use custom command to kill

        Example: --kill-cmd "echo \"My baby shot me down\" >> bang_bang.log"
-m, --max-errors <max-errors>
        Maximum number of <COMMAND> errors in a row.

        0 for infinite. Only used by `--keep-alive`. [default: 0]
-n, --network-every <n>
        Network check delay, in seconds.

        Check network again after this amount of seconds from the latest success. [default: 5]
    --ping-opt <opts>
        Options for `ping` command, requires `--use-ping` [default: -c1]

-p, --port <port>
        Default port to connect, ignored if `--use-ping`.

        Port to connect if host does not have a port specified. [default: 53]
-w, --wait-after-exec <seconds>
        Execution delay, in seconds.

        Seconds to check network for the first time after executing <COMMAND>. [default: 5]
-s, --signal <signal>
        Signal to kill <COMMAND>.

        Could be any unix signal: `SIGINT`, `SIGTERM`, etc. [default: SIGINT]
-t, --timeout <timeout>
        Timeout in seconds, ignored if `--use-ping` [default: 2]

ARGS: Command to run

```

Changelog

v3.2.0

v3.1.1

v3.1.0

v3.0.2

v3.0.1

v3.0.0

v2.0.0

v1.0.0

Backlog

License

Pingkeeper Copyright (C) 2020 Ignacio Lago

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.