Linux 自动监控 frp 服务运行状态

后台运行 frp, 监控 frp 运行状态

为了保持服务持续运行并且在崩溃后自动恢复, 我们可以通过 systemd 管理服务, 并结合监控脚本来确保服务不间断运行。

后台运行

使用 systemctl

我们通过 systemctl 来启动并管理服务, 确保服务能够开机启动。

编辑服务器配置文件 /lib/systemd/system/frps.service

[Unit]
Description=frp Server
After=network.target

[Service]
Type=simple
User=root
# 启动服务的命令 (此处写你的 frps 的实际安装目录)
ExecStart=/your/path/frps -c /your/path/frps.ini

[Install]
WantedBy=multi-user.target

客户端的配置与服务器端类似。可以通过 systemctl start frpssystemctl start frpc 启动服务

使用 screen

#!/bin/bash
screen_name=$"frpc"
cmd=$"/home/frp/frpc -c /home/frp/frpc.ini"

screen -dmS $screen_name
screen -x -S $screen_name -p 0 -X stuff "$cmd"
screen -x -S $screen_name -p 0 -X stuff $'\n'

监控服务

服务监控脚本

为了避免服务崩溃后需要手动重启, 我们可以编写监控脚本来实时检测服务状态, 如果服务停止则自动重启。

服务器端监控 frps

#!/bin/sh
ps -fe | grep frps | grep -v grep
if [ $? -ne 0 ]
then
    echo "start process....."
    systemctl start frps
else
    echo "runing....."
fi

客户端端监控 frpc (基于 CentOS 7 测试)

#!/bin/bash
ps -fe | grep frp/frpc | grep -v grep
if [ $? -ne 0 ]; then
  echo "start process....."
  systemctl start frpc
else
  echo "runing....."
fi

代码执行逻辑

ps -fe | grep frps | grep -v grep
  • ps -fe 会列出所有正在运行的进程及其详细信息

  • | grep frps

    • | 是管道符, 用于将前一个命令的输出传递给下一个命令
    • grep frps 会从 ps -fe 的输出中筛选出包含字符串 frps 的行。即, 查找所有包含 frps 进程名的进程

    这一步的作用是过滤出所有包含 frps 进程名的行。如果 frps 进程在运行, 它会显示该进程的相关信息

  • | grep -v grep

    • grep -vgrep 的一个选项, 表示反向匹配, 即排除匹配到的行
    • grep -v grep 会从前面的输出中排除掉包含 grep 字符串的行。因为在执行 grep 命令时, grep 本身也会被列出为一个进程, 所以这一步是用来过滤掉 grep 命令本身的输出, 确保结果中只显示 frps 进程

这条命令的目的是检查是否有名为 frps 的进程在运行。如果 frps 进程正在运行, ps -fe | grep frps 会返回进程信息, 然后通过 grep -v grep 排除掉包含 grep 本身的行, 最终只显示 frps 进程。如果没有找到 frps 进程, 返回的结果会为空, 并返回一个非 0 值。

  • $? 表示上一个命令的返回值
  • -ne 0 表示返回值不等于 0, 表示命令执行失败, 也就是说 frps 进程没有运行。
  • -eq 0 表示返回值等于 0, 表示命令执行成功, 也就是说 frps 进程正在运行。

定时监控

为了定期检测服务是否正常运行, 可以使用 cron 设置定时任务, 每一分钟执行一次监控脚本。

设置定时任务, 使用命令 crontab -e

*/1 * * * * sh /your/path/check_frp_status.sh

这样每分钟执行一次 check_frp_status.sh 脚本, 确保服务持续运行

客户端也要做相应处理。到此, 再也不用担心因内网穿透服务崩溃或中断带来的问题了!


原文

FRP局域网穿透+linux自动监控服务运行

最后更新于 2019-09-05
使用 Hugo 构建
主题 StackJimmy 设计