受欢迎的博客标签

frpc无法自启动解决办法 - debain 12 frpc : inactive (dead)

Published

systemctl start frpc、systemctl enable frpc 都成功了,重启后frpc服务并没有启动

原因分析

FRP 如果是进程卡死,有几种可能的原因:

老版本:检查是否是使用了比较早期的版本,可能存在一些稳定性的 Bug。如果是老版本,可以更新后测试。
有循环:配置了循环的映射,这个一定要检查,如果存在循环映射,只要被连接一次,那么可能会无限循环连接自己,直到把资源消耗完。建议先仔细排查。
缺文件:可能是操作系统问题,部分依赖的库存在损坏或缺失,FRP 某些情况下需要这些功能,因此在运行某些功能时出错。这种情况下,如果服务器上没有其他重要业务,建议重装系统。
被扫描:机器性能不足,并且映射的连接受到了某种高频请求,比如映射了 HTTP,搜索引擎偶尔发起了大量爬行,或是某些常用的登录协议(比如 Windows 远程桌面),被持续扫描。建议从日志检查,如果存在,可以使用防火墙规则限制 IP 请求频次。

 

debain 12 frpc : inactive (dead)

 sudo systemctl status frpc.service
○ frpc.service - Frp Client Service
     Loaded: loaded (/etc/systemd/system/frpc.service; disabled; preset: enabled)
     Active: inactive (dead)

 

option 1.Debian看守程序(run failure)

FRP Client doesnt start automatically when Restart=on-failure

 

你提供的日志中包括

 
9月 04 12:25:31 oyal-desktop frpc[673]: dial tcp 101.34.125.113:7000: connect: network is unreacha

 

frpc连接101.34.125.113:7000失败,失败后frpc也终止了
你可以使用下面的frpc.service
Restart=on-failure: 启动失败之后重启
RestartSec=5s: 重启间隔为5s
这样frpc连接frp server之后会自动重新连接

 

journalctl -u frpc
sudo journalctl -fu frpc.service --since yesterday
sudo journalctl -fu frpc.service --since today

 

[Unit]
Description=Frp Client Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/root/frp/frpc -c /root/frp/frpc.ini
ExecReload=/root/frp/frpc reload -c /root/frp/frpc/frpc.ini

[Install]
WantedBy=multi-user.target

 

开机后,frpc.service启动时,树莓派还没来得及连上WIFI, 所以启动不了。然后把frpc.service改成了以下内容:

 

sudo systemctl daemon-reload,用了之后成功启动了。然后再次用systemctl enable frpc注册自启动,然后重启树莓派

 

https://www.brucelog.club/mess-around-with-raspberry-pi/frpc-auto-start-failed/

 

[Unit]
Description=Frp Client Service
After=network.target

[Service]
Type=simple
#User=nobody
DynamicUser=yes
Restart=aways
RestartSec=5s
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.ini

[Install]
WantedBy=multi-user.target

 

[Unit]
Description=Frp Client Service
After=network.target

[Service]
Type=simple
#User=nobody
DynamicUser=yes
Restart=aways
RestartSec=5s
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.ini
ExecStop=/bin/kill $MAINPID

[Install]
WantedBy=multi-user.target

sudo systemctl daemon-reload

 

Debian

option 2.Debian-使用shell写一个进程监控脚本restart-frpc.sh

linux下用脚本实现:监控一个进程,不存在则将其启动。run ok

vi restart-frpc.sh

#!/bin/bash
 
# 设置要检查的进程名称
PROCESS_NAME="frpc"
 
# 定义一个函数来检查进程是否运行
check_process() {
    # 使用ps命令列出所有进程,并通过grep过滤出包含指定进程名称的行
    PIDS=`ps -ef | grep -v grep | grep "$PROCESS_NAME"`
    if [ -n "$PIDS" ]; then
        return 0  # 如果$PIDS不为空,表示进程存在
    else
        return 1  # 如果$PIDS为空,表示进程不存在
    fi
}
 
# 定义一个函数来启动进程
start_process() {
    # 切换到Elasticsearch的安装目录下的bin目录,并执行启动脚本
    
        sudo systemctl restart frpc
    
  
}
 
# 无限循环,用于检查和重启进程
while true; do
    # 调用check_process函数来检查进程是否存在
    check_process
    if [ $? -ne 0 ]; then
        echo "$PROCESS_NAME is not running. Restarting..."
        # 进程不存在,输出提示信息并调用start_process函数来重新启动它
        start_process
    fi
 
    # 休眠5秒,根据需要调整休眠时间
    sleep 5
done

注:1、pgrep 根据给出的进程名判断是否有这个名字的进程。

output

# pgrep frpc
637

 

检查服务状态shell脚本

#!/bin/bash
base_server=(
zookeeper
kafka
mongodb
docker
redis
etcd
kubelet
elasticsearch
redis@1
redis@2
redis@3
redis@4
redis@5
redis@6
)
for bs in ${base_server[*]}; do
#        `systemctl status $bs |awk -F ':' '{print $2}' | sed -n 3p`
#systemctl status  $bs
echo "-------------------------------------------------------------------------"
echo "$bs" ":"     
rs="`systemctl status  $bs |grep -E  'Active|PID'`"
#echo "$rs"
run="`echo "$rs" |grep -B 2 'running'`"
fai="`echo "$rs" |grep  -E -B 2 'failed|inactive|dead'`"
#echo -e  "\033[32m $rs |grep 'running' \033[0m "
#echo -e  "\033[31m $rs |grep 'failed' \033[0m "
#错误之处,没有把变量提取
#run=$rs |grep  'running'
#fai=$rs |grep -E 'failed|inactive|dead'
echo -e  "\033[32m $run \033[0m"
echo -e  "\033[31m $fai  \033[0m "
done
@raspberrypi:~# systemctl status  frpc |grep -E  'Active|PID'
     Active: inactive (dead)
root@raspberrypi:~# systemctl status  frpc |grep -E  'failed|inactive|dead'
     Active: inactive (dead)

 

#!/bin/bash
 
# 设置要检查的进程名称
PROCESS_NAME="frpc"
 
# 定义一个函数来检查进程是否运行
check_process() {
    # 使用ps命令列出所有进程,并通过grep过滤出包含指定进程名称的行
    PIDS=`ps -ef | grep -v grep | grep "$PROCESS_NAME"`
    if [ -n "$PIDS" ]; then
        return 0  # 如果$PIDS不为空,表示进程存在
    else
        return 1  # 如果$PIDS为空,表示进程不存在
    fi
}

# 定义一个函数来检查进程是否运行
check_process_status() {
    # 使用ps命令列出所有进程,并通过grep过滤出包含指定进程名称的行
    
PIDS="`systemctl status  $PROCESS_NAME |grep -E  'failed|inactive|dead'`"

    
    if [ -n "$PIDS" ]; then
        return 1  # 如果$PIDS不为空,表示进程存在
    else
        return 0  # 如果$PIDS为空,表示进程不存在
    fi
}
 
 
# 定义一个函数来启动进程
start_process() {
    # 切换到Elasticsearch的安装目录下的bin目录,并执行启动脚本
    
        sudo systemctl restart frpc
    
  
}
 
# 无限循环,用于检查和重启进程
while true; do
    # 调用check_process函数来检查进程是否存在
    check_process_status
    if [ $? -ne 0 ]; then
        echo "$PROCESS_NAME is not running. Restarting..."
        # 进程不存在,输出提示信息并调用start_process函数来重新启动它
        start_process
    else
        echo "$PROCESS_NAME is  running..."
    fi
 
    # 休眠5秒,根据需要调整休眠时间
    sleep 5
done

 

@raspberrypi:~# ./restart-frpc.sh 
frpc is not running. Restarting...
frpc is  running...
frpc is  running...
frpc is  running...
frpc is  running...

sh restart-frpc.sh

直接在后台运行脚本

sh restart-frpc.sh &

 

./test.sh: 权限不够

 

Windows -restart-frpc.bat

frpc进程终止了。网上一查,结果才发现这玩意的通病就是莫名其妙的终止进程,原因不明。一查解决方案,都是搞个看守程序。

只需要写个批处理run.bat来启动frpc,start参数后面加个/wait,表示等到程序执行完成,当执行完成的时候,不管三七二十一,再重新运行run.bat,如此就进入一个死循环。如果真的想要终止进程,就把bat的cmd进程给终止了,再终止frpc。

执行了几天,再也没有访问中断的问题了。每次frpc中断,都可以在一秒钟内迅速恢复.

@echo off
echo 当前目录:%~dp0 >>log.txt
if not exist %~dp0frpc.exe (
	echo %~dp0frpc.exe 文件不存在 >>log.txt
	exit
)
echo %date% %time% 正终止其它的FRPC进程 >>log.txt
taskkill /f /im frpc.exe
echo %date% %time% 已经终止全部的FRPC进程 >>log.txt
echo %date% %time% 正在启动FRPC >>log.txt
start /wait frpc.exe -c frpc.ini
echo %date% %time% FRPC发生中断 >>log.txt
run.bat


                        
原文链接:https://blog.csdn.net/meishow88/article/details/131199722

 

设置linux设置开机启动脚本(3种方法)

https://blog.csdn.net/jinking01/article/details/126878417

chmod +x restart-frpc.sh

~# ls -l
-rw-r--r-- 1 root root      1060 Mar 24 13:24 restart-frpc.sh
root@raspberrypi:~# chmod +x restart-frpc.sh
root@raspberrypi:~# ls -l
-rwxr-xr-x 1 root root      1060 Mar 24 13:24 restart-frpc.sh

 

way 3.使用 systemd 服务(debain12)

本方法仅适用于 systemd 系统.

frpc_auto_run_script.service

[Unit]
Description=Script Frp Client Service
After=network.target network-online.target
Requires=network-online.target

[Service]
ExecStart=/root/restart-frpc.sh
Restart=always
RestartSec=1min

[Install]
WantedBy=multi-user.target

systemctl daemon-reload

systemctl enable  frpc_auto_run_script.service

systemctl enable  restart frpc_auto_run_script.service

 

 

【Linux】监控项目进程挂了后自动重启脚本

https://blog.csdn.net/qq_32020645/article/details/134159898

https://blog.51cto.com/u_11579569/6163160

https://blog.csdn.net/weixin_30444105/article/details/97396612