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

您所在的位置:网站首页 手机开机服务 Ubuntu20.0.4下设置frpc开机自启动

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

2024-07-04 14:19| 来源: 网络整理| 查看: 265

目录 一、下载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 = 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 6月   3  2021 frpc.service -rw-r--r-- 1 1001 docker 257 6月   3  2021 [email protected] -rw-r--r-- 1 1001 docker 210 6月   3  2021 frps.service -rw-r--r-- 1 1001 docker 208 6月   3  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 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). 重启验证  

  



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3