当前位置: 首页 > news >正文

Linux 后台任务详解:、nohup、jobs、systemd 的区别

Linux 后台任务详解:&、nohup、jobs、systemd 的区别

1. 前言

在 Linux 中,我们经常需要让程序在后台运行。

常见场景:

  • 后台执行脚本;
  • 退出 SSH 后程序继续运行;
  • 让服务开机自启;
  • 查看后台任务;
  • 把程序做成系统服务。

常见工具有:

&nohupjobsfgbgsystemd

本文重点讲清楚它们的区别和使用场景。


2. 前台任务和后台任务

默认运行命令时,任务在前台执行。

sleep100

此时终端会被占用。
命令结束前,不能继续输入其他命令。

如果想后台执行,在命令后加&

sleep100&

输出类似:

[1] 12345

含义:

内容含义
[1]当前 shell 中的任务编号
12345进程 PID

3. jobs:查看当前 shell 的后台任务

查看后台任务:

jobs

示例:

[1]+ Runningsleep100&

注意:

jobs 只能查看当前 shell 管理的任务。

如果重新打开一个终端,原来终端里的 jobs 不会显示在新终端中。


4. fg 和 bg

把后台任务切回前台:

fg%1

暂停前台任务:

Ctrl+Z

暂停后查看:

jobs

可能看到:

[1]+ Stopped python app.py

让暂停任务继续在后台运行:

bg%1

这一套适合临时控制任务。


5. & 的局限

使用:

python app.py&

程序会进入后台。
但是如果关闭终端,程序可能退出。

原因是它仍然和当前终端会话有关。
终端关闭时,系统可能向进程发送SIGHUP信号。

所以:

& 适合临时后台运行,不适合长期服务。

6. nohup:退出终端后继续运行

nohup的作用是让程序忽略挂起信号。

常见写法:

nohuppython app.py>app.log2>&1&

拆开理解:

部分含义
nohup忽略 SIGHUP
python app.py要运行的程序
> app.log标准输出写入日志
2>&1标准错误也写入日志
&后台运行

查看日志:

tail-fapp.log

如果不指定日志文件,默认可能写入:

nohup.out

7. 2>&1 是什么

Linux 中有三个常见文件描述符:

编号含义
0标准输入
1标准输出
2标准错误

命令:

>app.log

等价于:

1>app.log

只重定向标准输出。
如果还想把错误输出也写进同一个文件:

>app.log2>&1

所以完整后台运行常写成:

nohupcommand>app.log2>&1&

8. disown:脱离当前 shell

如果已经用&启动任务:

python app.py&

可以用:

jobsdisown %1

让任务脱离当前 shell 作业管理。
但实际项目中,更建议直接用nohupsystemd


9. systemd:正式服务管理

systemd是现代 Linux 常用的系统服务管理器。
它适合管理长期运行的服务。

常见命令:

systemctl start nginx systemctl stop nginx systemctl restart nginx systemctl status nginx systemctlenablenginx systemctl disable nginx
命令作用
start启动
stop停止
restart重启
status查看状态
enable开机自启
disable取消开机自启

10. 创建 systemd 服务

假设程序路径:

/opt/myapp/app

创建服务文件:

sudovim/etc/systemd/system/myapp.service

内容:

[Unit] Description=My App Service After=network.target [Service] Type=simple WorkingDirectory=/opt/myapp ExecStart=/opt/myapp/app Restart=always RestartSec=3 User=www-data Group=www-data [Install] WantedBy=multi-user.target

重新加载配置:

sudosystemctl daemon-reload

启动服务:

sudosystemctl start myapp

查看状态:

sudosystemctl status myapp

设置开机自启:

sudosystemctlenablemyapp

查看日志:

journalctl-umyapp-f

11. &、nohup、systemd 对比

方式适合场景退出终端是否稳定是否支持开机自启是否方便管理
&临时后台任务不稳定不支持一般
nohup + &长时间脚本较稳定不支持一般
tmux/screen交互式会话稳定不支持适合调试
systemd正式服务稳定支持很方便

选择建议:

临时跑一下:& 退出终端继续跑:nohup 需要交互会话:tmux/screen 正式服务部署:systemd

12. 常见问题

12.1 nohup 启动后马上退出

先看日志:

catapp.logcatnohup.out

常见原因:

  • 工作目录不对;
  • 配置文件路径错误;
  • 端口被占用;
  • 环境变量缺失;
  • 程序启动时报错。

12.2 systemd 手动运行正常,服务运行失败

常见原因是 systemd 环境变量较少,不会自动加载用户的.bashrc

解决思路:

  • 使用绝对路径;
  • 配置WorkingDirectory
  • 配置Environment
  • 指定正确User
  • journalctl -u 服务名看日志。

示例:

Environment=JAVA_HOME=/usr/lib/jvm/java-17 Environment=PATH=/usr/local/bin:/usr/bin:/bin

13. 小结

Linux 后台任务可以这样记:

&:放到当前 shell 后台 jobs:看当前 shell 的任务 fg/bg:前后台切换 nohup:退出终端继续运行 systemd:正式服务管理

常用命令:

command&jobsfg%1bg%1nohupcommand>app.log2>&1&systemctl status myapp journalctl-umyapp-f

如果只是临时执行脚本,用nohup就够。
如果是线上服务,建议写成 systemd 服务。

http://www.gsyq.cn/news/1393587.html

相关文章:

  • 佛山黄金回收行业综合实力排名TOP5,2026年5月权威测评榜单 - 生活测评君
  • 物理生物学研究报告【20260018】
  • 人工智能【第42篇】AutoML入门:自动化机器学习全流程
  • 3个实用技巧高效掌握MulimgViewer:免费多图对比与批量处理指南
  • Git stash pop 深度解析:分支切换时的工作区状态精准还原
  • 基于X3D-M与迁移学习的婴儿痉挛症视频自动检测系统实践
  • 脉冲神经网络与STDP学习机制在神经形态计算中的应用
  • FPGA架构创新:MRSA如何实现Scrypt算法23倍GPU能效?
  • 如何为你的Python项目快速接入多个大模型API并统一管理
  • LM2596 恒压恒流:从典型降压到可调电源的闭环设计
  • 【云计算学习之路】学习Centos7系统-Linux下用户及组管理
  • 掌握Prompt、Context、Harness三步进化,轻松驾驭大模型,成为AI时代工程师 | CSDN技术干货
  • 深度剖析Django-ecommerce:如何构建高可扩展的电商数据流转系统
  • 算法竞赛常用函数整理(C++)
  • 小样本学习与注意力机制在婴儿表情识别中的实战应用
  • Spring 项目配置方式及优先级(案例)
  • KaTrain围棋AI训练平台:解锁你的围棋潜能,用AI提升棋力!
  • 垃圾处理设备综合实力TOP榜发布:河南多瑙河机械深耕陈腐填埋垃圾治理成行业标杆 - 新闻快传
  • 2026年南通短视频代运营与本地获客服务商深度横评指南 - 优质企业观察收录
  • VS Code智能编程扩展:从代码补全到AI生成的全方位效率提升指南
  • av1编码--编码块的预测约束条件
  • 《多智能体系统实战:我用10个智能体搭建了一个自动赚钱的AI公司》
  • CZSC缠论量化插件:如何用算法自动化解决传统缠论分析的三大难题
  • 黄金变现窗口期开启,深圳五大回收平台真实测评! - 奢侈品回收测评
  • 汽车零部件自动化落地案例|3D视觉引导蓄能器抓取
  • 如何用ChanlunX免费缠论插件实现通达信智能技术分析
  • 深度解析:导热硅脂丝印工艺 原理、优势及应用实践 - 资讯速览
  • 上海小程序开发|定制公司哪家好?2026推荐十家小程序制作公司高品质精准盘点 - 新闻快传
  • 2026 年 5 月企业培训平台怎么选?避开选型踩坑难题 - 讲清楚了
  • 观察 Taotoken 在不同时段与地区的 API 响应延迟情况