零:前言

以下内容基于ubuntu系统
在服务器上使用&后台执行frp服务端程序后,一旦断开ssh的连接,frp服务端程序会断掉,所以需要找到能够长时间运行程序的方法,以下提供了两种方法,用户在退出登录后也能稳定运行。

一、nohup方法

nohup能够实现用户退出登录后继续执行程序 

  1. 忽略挂断(SIGHUP 信号):当用户退出终端(例如关闭 SSH 连接)时,终端会向其运行的所有进程发送一个 SIGHUP 信号,通常这会导致进程终止。nohup 命令可以忽略这个信号,使得进程即使在终端关闭后也能继续运行。
  2. 将输出重定向到文件nohup 命令会将命令的标准输出(stdout)和标准错误(stderr)重定向到 nohup.out 文件中,除非指定了其他文件。

例如:

nohup ./frps -c frps.ini &

这样能保证退出登录后,程序依然在后台运行,并且程序输出内容会重定向到nohup.out日志文件

重新指定重定向日志文件:

nohup frps -c /path/to/frps.ini > /xxpath/custom_output.log 2>&1 &

符号>可以将输出重定向到一个自定义日志文件中

符号2>&1表示将标准错误也重定向到标准输出,也就是同一个日志文件中

二、添加新的systemd服务

为frps程序直接创建一个systemd服务,只需要在/etc/systemd/system/文件夹中添加一个frps相关文件frps.service

sudo vim /etc/systemd/system/frps.service

创建并打开文件后写入如下内容:

ExecStart参数是指你的服务要执行的操作,例子中只用来启动frps程序,根据自己的需求更换即可

[Unit]
Description=FRP Server Service
After=network.target

[Service]
Type=simple
ExecStart=/home/ubuntu/server_app/frp/frp_0.48.0_linux_amd64/frps  -c /home/ubuntu/server_app/frp/frp_0.48.0_linux_amd64/frps.ini
Restart=on-failure

[Install]
WantedBy=multi-user.target

添加完毕后依次执行如下命令

#服务持久化,设置服务在系统启动时自启动
sudo systemctl enable frps.service
#立即启动服务
sudo systemctl start frps.service

服务启动后,可以使用如下命令查看状态,其中也能查看到服务是否启动失败

sudo systemctl status frps.service

若要详细分析失败原因,可以查看对应的服务日志

journalctl -u frps.service
文章作者: keeshow
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 keeshow
默认分类 Linux
喜欢就支持一下吧