#networking #tcp-connection #linux #run-command #linux-macos #command-line-utilities #tool

应用 pingkeeper

命令行应用程序,用于监控网络是否可达(直接TCP连接或ping),并在失败时运行命令。可选地,它可以监控命令是否持续运行,如果网络不可达,则重启它。

6个稳定版本

3.2.0 2020年4月19日
3.1.1 2020年4月18日
3.0.2 2020年4月17日

#33 in #tcp-connection

GPL-3.0-or-later

185KB
725

pingkeeper

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

命令行应用程序,用于监控检查命令的退出状态,并在失败时运行另一个主命令。可选地,它可以监控提供的主命令是否持续运行,如果检查命令失败,则触发重启(终止并运行)。

主要用于检查网络是否可达(直接TCP连接或ping),当前版本可以通过添加自定义检查和终止命令执行更多操作。

自豪地使用Rust 🦀 在巴塞罗那制作。

它是如何工作的?

Flow Chart

安装

三种选择

Cargo & Go

  1. 如果您已经安装了cargo,请使用

    cargo install pingkeeper
    

手动下载

  1. 发行版页面下载发行版二进制文件。

  2. 检查下载文件的完整性(版本可能不同)

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

    它应该显示: pingkeeper-macos-v3.2.0.tar.gz: OK

  3. 使用以下命令提取存档(版本可能不同)

    tar xvf pingkeeper-macos-v3.2.0.tar.gz
    
  4. 使用以下命令检查二进制文件的完整性

    sha512sum --check pingkeeper.sha512
    

    它应该显示: pingkeeper: OK

  5. pingkeeper二进制文件复制到您的$PATH中,例如:/usr/local/bin

自己构建

这需要安装稳定版本的rust & cargo。有关更多信息,请访问Rust网站

  1. 运行以下命令

    cargo build --release
    
  2. 您将在./target/release/pingkeeper找到您的可执行文件。

用法

用法示例

  • 使用OpenVPN保持VPN连接活跃

    sudo pingkeeper -k "openvpn /home/user/vpn_configuration.ovpn"
    
  • 使用Hummingbird保持VPN连接活跃,无需记录日志

    sudo pingkeeper --keep-alive --quiet "hummingbird denmark.ovpn"
    
  • 当网络故障时,使用ping进行测试,向您的老板发送电子邮件

    pingkeeper --use-ping "mail -s \"Sorry, my network is down. I will be right back asap.\" [email protected] < /dev/null"
    
  • 当您的家用服务器似乎出现故障时,使用ping进行测试,通过pushbullet-cli消息通知自己

    pingkeeper --hosts "192.168.1.50" --use-ping "pb push \"Is home server down?\""
    
  • 当您的opentracker比特Torrent跟踪服务器似乎出现故障时,使用t发推文

    pingkeeper --hosts "10.1.1.28:6969" "t update \"Dear users, the tracker is currently down :(\""
    
  • 当该死的无线路由器再次出现故障时,运行您自己的脚本

    pingkeeper "/home/user/try_reset_router.sh"
    
  • 当哨兵文件丢失时关闭服务器

    sudo pingkeeper --check-cmd "cat /root/canary.txt" --kill-cmd "echo" "shutdown -h now"
    

用户手册

运行pingkeeper --help获取帮助


USAGE:
    pingkeeper [FLAGS] [OPTIONS] <COMMAND>

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 <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>
            Command to run

变更日志

v3.2.0

  • opt --kill-cmd,自定义杀戮命令。
  • opt --check-cmd,自定义检查命令。
  • 添加测试。
  • 改进文档。

v3.1.1

  • 修复了与选项-v相关的错误。

v3.1.0

  • 支持在--hosts中带有端口的地址。
  • 支持IPv4和IPv6地址。
  • 改进文档。
  • 改进测试。

v3.0.2

  • 改进文档。
  • 改进测试。
  • 将使用示例添加到文档中。

v3.0.1

  • 改进文档。

v3.0.0

  • 直接检测网络连接。
  • opt --use-ping,使用系统ping而不是直接连接。
  • opt -t --timeout,等待网络连接的秒数。
  • opt --max-errors,允许连续出现多少次保持活跃错误。
  • 改进文档。

v2.0.0

  • 将opt --boot-time重命名为--wait-after-exec
  • 将opt --check-time重命名为--ping-every
  • opt --signal;默认:"SIGINT"
  • 流程图。
  • 将逻辑移至子文件。
  • 测试。

v1.0.0

  • 当ping失败时启动命令。
  • opt --hosts;默认:"8.8.8.8 8.8.6.6 1.1.1.1 1.0.0.1"
  • 检测网络是否可达。
  • opt --ping-opt,ping选项;默认:"-c1"
  • opt --boot-time,命令后检查网络的秒数;默认:5
  • opt --check-time,网络检查延迟的秒数;默认:5
  • 网络错误时重启(发送SIGINT信号)。
  • opt --keep-alive,在初始化时运行命令,在命令退出时重启。
  • opt -v --verbose,显示日志。
  • opt -q --quiet,隐藏子命令的stdout/stderr。

回执

  • 在杀死子进程后等待,然后SIGTERM。
  • 改进生成的文档。
  • 导出库。
  • 集成测试:模拟。
  • 集成测试:命令行。
  • 网站。
  • LaunchDaemon生成器。
  • macOS通知:连接丢失,连接恢复。
  • opt --disable-notifications
  • 在子进程中检测SIGTERM并停止。
  • 将进程ID写入proc。
  • opt -f --force以杀死PID并从proc中删除PID。
  • 检查接口是否已启动。
  • 将日志写入/var/log

许可证

Pingkeeper 版权所有 (C) 2020 Ignacio Lago

本程序是自由软件:您可以按照自由软件基金会发布的GNU通用公共许可证的条款重新分发和/或修改它,许可证版本为3,或者(根据您的选择)任何更高版本。

本程序的分发是希望它将是有用的,但没有任何保证;甚至没有关于适销性或特定用途适用性的暗示保证。有关详细信息,请参阅GNU通用公共许可证。

您应该已经随本程序收到了一份GNU通用公共许可证的副本。如果没有,请参阅https://www.gnu.org/licenses/

依赖项

~5.5MB
~100K SLoC