因为需要将frpc在树莓派中自动启动,一种方法可以通过在/etc/rc.local中添加运行frpc命令实现,但是我们不这样做,我们这次要采用极为好用的systemd,增加自定义服务并将服务设置为自动启动。
而systemd 的配置文件大部分放置于 /usr/lib/systemd/system/ 目录内。但是官方文件指出, 该目录的文件主要是原本软件所提供的设置,建议不要修改!而要修改的位置应该放置于 /etc/systemd/system/ 目录内。举例来说,如果你想要额外修改 vsftpd.service 的话, 他们建议要放置到哪些地方呢?
- /usr/lib/systemd/system/vsftpd.service:官方释出的默认配置文件;
- /etc/systemd/system/vsftpd.service.d/custom.conf:在 /etc/systemd/system 下面创建与配置文件相同文件名的目录,但是要加上 .d 的扩展名。然后在该目录下创建配置文件即可。另外,配置文件最好附文件名取名为 .conf 较佳! 在这个目录下的文件会“累加其他设置”进入 /usr/lib/systemd/system/vsftpd.service 内。
- /etc/systemd/system/vsftpd.service.wants/*:此目录内的文件为链接文件,设置相依服务的链接。意思是启动了 vsftpd.service 之后,最好再加上这目录下面建议的服务。
- /etc/systemd/system/vsftpd.service.requires/*:此目录内的文件为链接文件,设置相依服务的链接。意思是在启动 vsftpd.service 之前,需要事先启动哪些服务的意思。
1.在这里我们是需要新建一个服务,于是我直接将其放在/usr/lib/systemd/system/ 目录内,在该目录中新建一个名为frpc.service的文件。
2.编辑该文件,内容如下:
[Unit]
Description=frp Client
[Service]
ExecStart=/usr/bin/frpc -c /usr/local/etc/frpc.ini
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -9 $MAINPID
Restart=on-failure
RestartSec=20s
[Install]
WantedBy=multi-user.target
其中ExecStart为其在启动(start)该服务时需要执行的命令行(命令+参数).
ExecReload是一个可选的指令, 用于设置当该服务被要求重新载入配置时所执行的命令行.
ExecStop是一个可选的指令, 用于设置当该服务被要求停止时所执行的命令行.
需要注意的是,这里命令行中必须使用绝对地址。
其中环境变量$MAINPID为主程序的PID。 kill -HUP PID为重新读取配置文件而不关闭重启程序,kill -9 PID为强制关闭进程。
3.输入systemctl enable frpc.service 将该服务设置为自动启动,开机启动成功即可,值得一提的是必须要设置RestartSec,否则的话自动启动会一直失败。
![](https://www.qi-pc.cn/wp-content/uploads/2018/11/TIM%E6%88%AA%E5%9B%BE20181105233245.png)