当前位置: 首页 > news >正文

Ubuntu20.0.4下设置frpc开机自启动


目录
一、下载frp
二、解压
三、服务端部署
1.配置
2.运行
三、客户端部署
1、配置
2、后台运行
四、开机启动
1、拷贝frpc.service
2、修改配置
3、启用服务
五、ubuntu20.04使用 rc-local.service设置开机启动
1、建立开机服务添加 [Install] 段
2、授权rc-local.service
3、然后设置该 rc-local.service 服务开机启动:
4、创建 /etc/rc.local
1)、首先,新建一个 start.sh 脚本, 给start 脚本赋予执行权限 chmod 777 start.sh
2)、然后,编辑 /etc/rc.local , 加入test 脚本的调用绝对路径,这里的路径必须是绝对路径,当前文件是 rc.local
3)、然后执行以下命令赋予 /etc/rc.local 执行权限,这步一定要有,否则没效果的
4). 检查服务状态
5). 重启验证


一、下载frp

windows版本
https://github.com/fatedier/frp/releases/download/v0.37.0
amd版本:https://github.com/fatedier/frp/releases/download/v0.37.0/frp_0.37.0_linux_amd64.tar.gz

二、解压

tar -zxvf frp_0.37.0_linux_amd64.tar.gz

 安装系统服务工具systemd

sudo apt install systemd


三、服务端部署

1.配置
mv frp_0.37.0_linux_amd64 frp

修改frps.ini
[common]
bind_port = 7000
dashboard_port = 7500token = frp@test.cn
dashboard_user = admin
dashboard_pwd = frp@test.cn
vhost_http_port = 10080
vhost_https_port = 10443


2.运行

./frps -c frps.ini


三、客户端部署


1、配置
[common]
server_addr = frp.test.cn
server_port = 7000
token = frp@test.cn
[ubuntu_ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 7101[ubuntu_nginx]
type = tcp
local_ip = 127.0.0.1
local_port = 7102
remote_port = 7102
# 解决应用无法获取真实ip目前支持 v1 和 v2 两个版本的 proxy protocol 协议。
proxy_protocol_version = v2[ubuntu_mysql]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 7103[ubuntu_redis]
type = tcp
local_ip = 127.0.0.1
local_port = 6379
remote_port = 7104[ubuntu_rabbitmq_5637]
type = tcp
local_ip = 127.0.0.1
local_port = 5672
remote_port = 7105[ubuntu_rabbitmq_15672]
type = tcp
local_ip = 127.0.0.1
local_port = 15672
remote_port = 7106[ubuntu_es_9200]
type = tcp
local_ip = 127.0.0.1
local_port = 9200
remote_port = 9200[ubuntu_logstash_5044]
type = tcp
local_ip = 127.0.0.1
local_port = 5044
remote_port = 5044[ubuntu_kibana_5601]
type = tcp
local_ip = 127.0.0.1
local_port = 5601
remote_port = 5601[ubuntu_sentinel_8858]
type = tcp
local_ip = 127.0.0.1
local_port = 8858
remote_port = 8858[ubuntu_emqx_1884]
type = tcp
local_ip = 127.0.0.1
local_port = 1884
remote_port = 1884[ubuntu_wx_7443]
type = tcp
local_ip = 127.0.0.1
local_port = 7443
remote_port = 7443
# 目前支持 v1 和 v2 两个版本的 proxy protocol 协议。
proxy_protocol_version = v2



2、后台运行

nohup ./frps -c frps.ini &

四、开机启动
1、拷贝frpc.service
打开目录

root@sony-HP-Notebook:~# cd /usr/local/frp/systemd
root@sony-HP-Notebook:/usr/local/frp/systemd# ls -l
总用量 16
-rw-r--r-- 1 1001 docker 263 6月   3  2021 frpc.service
-rw-r--r-- 1 1001 docker 257 6月   3  2021 frpc@.service
-rw-r--r-- 1 1001 docker 210 6月   3  2021 frps.service
-rw-r--r-- 1 1001 docker 208 6月   3  2021 frps@.service
cp -rp /usr/local/frp/systemd/frpc.service /etc/systemd/system/



2、修改配置
重点是frpc的路径,以及失败重试

[Unit]
Description=Frp Client Service
After=network.target[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.ini
ExecReload=/usr/local/frp/frpc reload -c /usr/local/frp/frpc.ini[Install]
WantedBy=multi-user.target


3、启用服务

Systemctl daemon-reload
systemctl enable frpc.service
systemctl status frpc.service
# 启动
systemctl start frpc.service


五、ubuntu20.04使用 rc-local.service设置开机启动
参考:Ubuntu 20.04 设置开机自启脚本

rc-local.service 是系统自带的一个开机自启服务, 但是在 Ubuntu20 的 systemd 启动方式下,该服务默认没有开启。,启用它需要做些简单的配置。

在 路径下 /lib/systemd/system/rc-local.service 的 rc-local.service 的脚本,内容规定了 rc.local 的启动顺序和行为

1、建立开机服务添加 [Install] 段
在 路径下 /lib/systemd/system/rc-local.service 查看 rc-local.service 文件内容, 前面注释不看了,只看主要内容, 每个字段的解释

[Unit]    # 区块:启动顺序与依赖关系
Description=/etc/rc.local Compatibility           # 服务的描述,方便人们阅读
Documentation=man:systemd-rc-local-generator(8)   # 一组用空格分隔的文档URI列表,这些文档是对此单元的详细说明
ConditionFileIsExecutable=/etc/rc.local           # 指定了执行的文件, 表示服务要启动的程序(或脚本)# 系统会检测指定的路径是否存在并且是一个可执行文件,必须使用绝对路径
After=network.target  # 定义启动顺序。示该服务的依赖关系# Before=xxx.service,代表本服务在xxx.service启动之前启动;# After=xxx.service,代表本服务在xxx.service之后启动。[Service]   # 区块:启动行为,如何启动,启动类型。
Type=forking                   # 后台运行的形式
ExecStart=/etc/rc.local start  # 指定启动单元的命令或者脚本, 启动服务的命令(命令必须写绝对路径)
TimeoutSec=0
RemainAfterExit=yes            # 如果设置这个选择为真,服务会被认为是在激活状态
GuessMainPID=no#这一段原文件没有,需要自己添加
[Install]     # 区块,定义如何安装这个配置文件,即怎样做到开机启动
WantedBy=multi-user.target   # WantedBy:表示该服务所在的 Target(服务组)# multi-user.target 表示多用户命令行状态
Alias=rc-local.service       # 指的是表示该服务所属 target



原本的文件是没有[Install] 所以我们需要增加[Install] 内容

最终内容为如下,注意切记不要有中文注释:

[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no[Install]
WantedBy=multi-user.target
Alias=rc-local.service


上述命令只写了启动的,重启、停止等可以根据自己情况添加。
注意:启动、重启、停止命令全部要求使用绝对路径
ExecReload 为服务的重启命令
ExecStop 为服务的停止命令
PrivateTmp=True 表示给服务分配独立的临时空间

原始的 rc-local .service 文件的 Unit 段有行代码:

ExecStart=/etc/rc.local start
1
这行代码规定了这个service在开机启动时所执行的命令是:/etc/rc.local start。即运行 /etc/rc.local 脚本。不过可以看出,这个脚本的内容少了 [Install] 段,也就是说,没有定义如何做到开机启动,所以显然这是这个service是无效的。 因此我们就需要在后面帮他加上 [Install] 段

2、授权rc-local.service
sudo vim /lib/systemd/system/rc-local.service
1
3、然后设置该 rc-local.service 服务开机启动:
systemd 默认读取 /etc/systemd/system 下的配置文件, 所以还需要在 /etc/systemd/system 目录下创建软链接,执行下面的命令

sudo systemctl enable rc-local.service
Created symlink /etc/systemd/system/multi-user.target.wants/rc-local.service → /lib/systemd/system/rc-local.service.# 上面的命令等效于一个软链接命令
ln -s /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service

这条指令的实际意义是向 /etc/systemd/system 中添加一个 /lib/systemd/system 的软链接(软链接可以理解为快捷方式),看终端中这条指令运行后打印的信息就知道了。

systemd 默认从目录 /etc/systemd/system 读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录
/lib/systemd/system,真正的配置文件存放在这个目录。systemclt enable
命令用于在上面两个目录之间建立符号链接关系。.service 文件在 Linux
中存在于三个位置:/etc/systemd/system、/run/systemd/system、/lib/systemd/system,这三个目录的配置文件优先级依次从高到低,如果同一选项三个地方都配置了,优先级高的会覆盖优先级低的。

另外:经过实际测试,不使用 systemclt enable 指令创建链接这一步其实也是可以实现开机启动的,这可能跟系统会在上述三种
system 目录下查找 service 并启动有关,只是启动顺序不同而已。

4、创建 /etc/rc.local
Ubuntu 20.04 默认不存在 /etc/rc.local,需要自己创建 touch /etc/rc.local,rc.local 中主要有两种方法添加开机启动内容

1)、首先,新建一个 start.sh 脚本, 给start 脚本赋予执行权限 chmod 777 start.sh
当前文件是 /usr/local/job/start.sh, start.sh 的内容是

#!/bin/sh
logFile='/usr/local/job/start_frp.log'
ltime=$(date "+%Y-%m-%d %H:%M:%S")
echo "${ltime} frp start ***********" >> "${logFile}"
./frpc -c frpc.ini &echo "${ltime} frp started" >> "${logFile}"cd /usr/local/job
./start.sh &
echo "${ltime} job started" >> "${logFile}"exit 0


2)、然后,编辑 /etc/rc.local , 加入test 脚本的调用绝对路径,这里的路径必须是绝对路径,当前文件是 rc.local

#!/bin/bash# 将你需要执行的命令写在这里,禁止写入死循环命令
logFile='/usr/local/start.log'
ltime=$(date "+%Y-%m-%d %H:%M:%S")echo "${ltime} 看到这行字,说明添加自启动脚本成功。" >  "${logFile}"
cd /usr/local/job
./start.sh &
echo "${ltime} job started" >> "${logFile}"exit 0

注意:调用 sh 脚本最后必须加上 & 是让脚本启动后在后台运行的作用, 否则可能会一直卡在开机界面,这个没有去测试过3)、然后执行以下命令赋予 /etc/rc.local 执行权限,这步一定要有,否则没效果的

sudo chmod 777 /etc/rc.local# 或者
sudo chmod +x /etc/rc.local

4). 检查服务状态
使用 sudo systemctl status rc-local.service 查看 rc-local 服务的状态, 显示 loaded 和 enabled。

5). 重启验证
 

  

相关文章:

Ubuntu20.0.4下设置frpc开机自启动

目录 一、下载frp 二、解压 三、服务端部署 1.配置 2.运行 三、客户端部署 1、配置 2、后台运行 四、开机启动 1、拷贝frpc.service 2、修改配置 3、启用服务 五、ubuntu20.04使用 rc-local.service设置开机启动 1、建立开机服务添加 [Install] 段 2、授权rc-local.service 3、…...

05 Redis之Benchmark+简单动态字符串SDS+集合的底层实现

3.8 Benchmark Redis安装完毕后会自动安装一个redis-benchmark测试工具,其是一个压力测试工具,用于测试 Redis 的性能。 src目录下可找到该工具 通过 redis-benchmark –help 命令可以查看到其用法 3.8.1 测试1 3.9 简单动态字符串SDS 无论是 Redis …...

【C++】priority_queue优先队列

头文件#include <queue> 优先队列具有队列的所有特性&#xff0c;本质是一个堆实现的&#xff0c;和队列基本操作相同: top 访问队头元素 empty 队列是否为空 size 返回队列内元素个数 push 插入元素到队尾 (并排序) emplace 原地构造一个元素并插入队列 pop 弹出队头元素…...

蓝桥杯---三国游戏

问题描述 小蓝正在玩一款游戏。游戏中魏蜀吴三个国家各自拥有一定数量的士兵 X, Y, Z (一开始可以认为都为 0 )。游戏有 n 个可能会发生的事件&#xff0c;每个事件之 间相互独立且最多只会发生一次&#xff0c;当第 i 个事件发生时会分别让 X, Y, Z 增加 Ai , Bi ,Ci 。…...

设计一个分布式ID

为了保证全局唯一性可以用时间作为区分点一部分&#xff0c;时间尽可能细化&#xff0c;可以精确到毫秒&#xff0c;甚至是微秒和纳秒。如果是分布式系统有多态机器&#xff0c;可以根据机器ID再进行以下区分。如哦机器运行的特别快&#xff0c;1毫秒有大量ID生成&#xff0c;可…...

259:vue+openlayers: 显示海量多边形数据,10ms加载完成

第259个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers项目中通过WebGLVectorLayerRenderer方式加载海量多边形数据。这里相当于将海量的数据放在同一个层的source中,然后通过webglTile的方式渲染出这一层。 本示例数据为5000个多边形,加载速度超级快。 直接…...

Go Zero微服务个人探究之路(十)实战走通微服务前台请求调用的一套流程model->rpc微服务->apiHTTP调用

前言 Go语言凭借低占用&#xff0c;高并发等优秀特性成为后台编程语言的新星&#xff0c;GoZero框架由七牛云技术副总裁团队编写&#xff0c;目前已经成为Go微服务框架里star数量最多的框架 本文记录讲述笔者一步步走通前台向后台发出请求&#xff0c;后台api调用rpc服务的相…...

K8s 安装部署-Master和Minion(Node)

K8s 安装部署-Master和Minion(Node) 操作系统版本&#xff1a;CentOS 7.4 Master &#xff1a;172.20.26.167 Minion-1&#xff1a;172.20.26.198 Minion-2&#xff1a;172.20.26.210&#xff08;后增加节点&#xff09; ETCD&#xff1a;172.20.27.218 先安装部署ETCD y…...

从零学习Linux操作系统 第二十部分 mariadb数据库的管理

一、对于数据库的基本介绍 1.什么是数据库 数据库就是个高级的表格软件 2.常见数据库 Mysql Oracle mongodb db2 sqlite sqlserver … 3.Mysql (SUN -----> Oracle) 4.mariadb (Mysql的一种&#xff09; 数据库中的常用名词 1.字段 &#xff1a;表格中的表头 2.表 &…...

数据脱敏和数据加密有什么区别

数据脱敏&#xff1a;主要是为了兼顾数据安全与数据使用&#xff0c;采用专业的数据脱敏算法。 数据加密:通过对数据进行编码来保护数据&#xff0c;获取实际值的唯一方法是使用解密密钥解码数据。 数据加密是可逆的&#xff0c;数据脱敏是不可逆的。 处理方法不同 保护内容…...

主流排序算法

冒泡排序&#xff08;Bubble Sort&#xff09;&#xff1a; 基本思想&#xff1a;通过比较相邻元素的大小&#xff0c;不断交换相邻元素的位置&#xff0c;使得较大的元素逐渐“浮”到数组的最后。时间复杂度&#xff1a;O(n^2)。 选择排序&#xff08;Selection Sort&#xf…...

MySql的使用方法

一.什么是MySql MySql是一种数据库管理系统&#xff0c;是用来存储数据的&#xff0c;可以有效的管理数据&#xff0c;数据库的存储介质为硬盘和内存。 和文件相比&#xff0c;它具有以下优点&#xff1a; 文件存储数据是不安全的&#xff0c;且不方便数据的查找和管理&#xf…...

C#,数据检索算法之三元搜索(Ternary Search)的源代码

数据检索算法是指从数据集合&#xff08;数组、表、哈希表等&#xff09;中检索指定的数据项。 数据检索算法是所有算法的基础算法之一。 本文发布 三元搜索&#xff08;Ternary Search&#xff09;的源代码。 1 文本格式 using System; namespace Legalsoft.Truffer.Algo…...

windbg:常用指令

windbg 调试 参考文档 1、viewing-and-editing-global-variables-in-windbg WinDBG 常用调试命令 加载符号 .sympath // 查看当前符号查找路径 .sympath c:\symbols // 将符号查找路径设为&#xff1a;c:\symbols .sympath c:\symbols // 将c:\symbols添加…...

23. 集合类

集合 1. 概述2. 分类2.1 单列集合&#xff08;Collection&#xff09;2.2 双列集合&#xff08;Map&#xff09; 单列集合 Collection、List、Set、ArrayList、LinkedList’、Vector、HashSet、TreeSet、LinkedHashSet双列集合 Map、HashTable、HashMap、TreeMap、Properties、…...

OpenAI平台:引领人工智能的创新与应用

在当今迅速发展的技术世界中&#xff0c;OpenAI已成为人工智能&#xff08;AI&#xff09;研究和应用的先驱。作为一个致力于确保人工智能的安全和广泛受益的组织&#xff0c;OpenAI通过其平台提供了一系列强大的工具和API&#xff0c;这些工具和API正在重塑我们与技术的互动方…...

redis原理(五)Lua语言

一、介绍&#xff1a; 1、背景&#xff1a; 在 Redis 的 2.6 以上版本中&#xff0c;除了可以使用命令外&#xff0c;还可以使用 Lua 语言操作 Redis。 Redis 命令的计算能力并不算很强大&#xff0c;而使用 Lua 语言则在很大程度上弥补了 Redis 的这个不足。 2、特点&#…...

SOHO外贸怎么建网站?做海洋建站的步骤?

SOHO外贸如何做跨境独立站&#xff1f;搭建外贸自建站的策略&#xff1f; 一位成功的SOHO外贸从业者不仅需要精湛的贸易技能&#xff0c;还需要一个优质的网站来展示产品、与客户互动&#xff0c;并建立强大的在线品牌形象。海洋建站将探讨在SOHO外贸领域如何建立一个成功的网…...

[论文阅读] |RAG评估_Retrieval-Augmented Generation Benchmark

写在前面 检索增强能够有效缓解大模型存在幻觉和知识时效性不足的问题&#xff0c;RAG通常包括文本切分、向量化入库、检索召回和答案生成等基本步骤。近期组里正在探索如何对RAG完整链路进行评估&#xff0c;辅助阶段性优化工作。上周先对评估综述进行了初步的扫描&#xff0…...

【Linux】动态库和静态库——动态库和静态库的打包和使用、gcc编译、拷贝到系统默认的路径、建立软连接

文章目录 动态库和静态库1.静态库和动态库的介绍2.静态库的打包和使用2.1生成静态库2.2使用静态库的三种方式2.2.1gcc编译2.2.2拷贝到系统默认的路径2.2.3建立软连接 3.动态库的打包和使用3.1生成动态库3.2使用动态库3.3解决加载不到动态库的方法 动态库和静态库 1.静态库和动…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...

ubuntu22.04 安装docker 和docker-compose

首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版

1.题目描述 2.思路 当前的元素可以重复使用。 &#xff08;1&#xff09;确定回溯算法函数的参数和返回值&#xff08;一般是void类型&#xff09; &#xff08;2&#xff09;因为是用递归实现的&#xff0c;所以我们要确定终止条件 &#xff08;3&#xff09;单层搜索逻辑 二…...