linux下设置frp开机启动

目录

  • 一、下载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

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

三、服务端部署

1.配置

mv frp_0.37.0_linux_amd64 frp

修改frps.ini

[common]
bind_port = 7000
dashboard_port = 7500
token = [email protected]
dashboard_user = admin
dashboard_pwd = [email protected]
vhost_http_port = 10080
vhost_https_port = 10443

2.运行

./frps -c frps.ini

三、客户端部署

1、配置

[common]
server_addr = frp.test.cn
server_port = 7000
token = [email protected]

[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 63  2021 frpc.service
-rw-r--r-- 1 1001 docker 257 63  2021 [email protected]
-rw-r--r-- 1 1001 docker 210 63  2021 frps.service
-rw-r--r-- 1 1001 docker 208 63  2021 [email protected]

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

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

2、授权rc-local.service

sudo vim /lib/systemd/system/rc-local.service

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). 重启验证

你可能感兴趣的:(linux,开发工具,linux,mysql,运维)