后台运行程序:让程序不受终端影响
2026/7/14 17:07:01 网站建设 项目流程

后台运行程序:让程序不受终端影响

SSH断开,程序就停了?

今天聊聊怎么让程序在后台持续运行。

问题原因

当你SSH登录服务器运行程序,断开SSH后程序会收到SIGHUP信号然后退出。

方法一:nohup命令

最简单的方法:

nohup命令&

例子:

nohupjava-jarapp.jar&
  • nohup:忽略SIGHUP信号
  • &:后台运行

输出会保存到nohup.out文件。

指定输出文件:

nohupjava-jarapp.jar>app.log2>&1&

查看后台进程:

jobspsaux|grepapp.jar

方法二:screen命令

screen可以创建一个"虚拟终端",断开后程序继续运行。

安装:

aptinstallscreen# Ubuntuyuminstallscreen# CentOS

基本用法:

# 创建新会话screen-Smyapp# 在会话里运行程序java-jarapp.jar# 按Ctrl+A然后按D,脱离会话(程序继续运行)# 查看会话列表screen-ls# 重新连接会话screen-rmyapp

常用快捷键(先按Ctrl+A):

  • d:脱离会话
  • k:关闭当前窗口
  • ?:帮助

方法三:tmux命令(推荐)

tmux比screen功能更强,是现代化的选择。

安装:

aptinstalltmux# Ubuntuyuminstalltmux# CentOS

基本用法:

# 创建新会话tmux new-smyapp# 运行程序java-jarapp.jar# 按Ctrl+B然后按D,脱离会话# 查看会话tmuxls# 重新连接tmux attach-tmyapp# 关闭会话tmux kill-session-tmyapp

常用快捷键(先按Ctrl+B):

  • d:脱离
  • c:新建窗口
  • n:下一个窗口
  • p:上一个窗口
  • %:左右分屏
  • ":上下分屏

方法四:systemd服务(生产推荐)

正式环境推荐把程序注册成systemd服务。

创建服务文件:

sudovim/etc/systemd/system/myapp.service
[Unit] Description=My Application After=network.target [Service] Type=simple User=app WorkingDirectory=/opt/app ExecStart=/usr/bin/java -jar /opt/app/myapp.jar Restart=always RestartSec=10 [Install] WantedBy=multi-user.target

启用服务:

sudosystemctl daemon-reloadsudosystemctlenablemyappsudosystemctl start myapp

管理服务:

systemctl start myapp systemctl stop myapp systemctl restart myapp systemctl status myapp# 查看日志journalctl-umyapp-f

选择建议

场景推荐方法
临时运行脚本nohup
调试开发tmux/screen
正式生产systemd

查看后台进程

# 查看所有进程psaux# 查找特定进程psaux|grepjavapgrep-fmyapp# 结束进程kill进程IDkill-9进程ID# 强制

远程管理

我用星空组网管理多台服务器,经常需要远程查看后台进程:

# 查看各服务器Java进程foripin10.26.1.{10..15};doecho"===$ip==="sshroot@$ip"ps aux | grep java | grep -v grep"done

小结

后台运行程序的方法:

  1. 临时用nohup 命令 &
  2. 调试用:tmux或screen
  3. 生产用:systemd服务

记住:生产环境一定要用systemd,可以开机自启、崩溃自动重启。

有问题评论区交流~

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询