Linux后台任务必学:nohup命令的5个实战技巧与避坑指南

Linux 后台任务不死神器:nohup 命令从入门到实战,再也不怕 ssh 断开! 摘要:本文深入讲解Linux中nohup命令的实战用法,解决后台任务因终端断开而中断的痛点。核心内容包括:1)nohup适用场景(长时间脚本、后台服务等);2)关键语法与输出重定向技巧;3)基础启停查操作流程;4)高级用法如目录指定、日志轮转;5)5个最佳实践方案(任务监控、内存限制等);6)完整MySQL备份脚本示例。强调nohup的核心价值是"任务持续运行",需重点掌握输出重定向和进程管理技巧。 阅读详情

Linux后台任务必学:nohup命令的5个实战技巧与避坑指南

在Linux系统管理中,后台任务的稳定运行是运维工程师的必修课。想象一下,当你启动一个耗时数小时的数据库备份脚本后,突然需要断开SSH连接——这时,nohup命令就成为了你的救星。但仅仅知道nohup command &这样的基础用法还远远不够,本文将带你深入探索nohup的高阶用法,解决实际运维中的痛点问题。

1. nohup核心机制与重定向原理

nohup(no hang up)的设计初衷是让进程在用户注销后仍能持续运行。与简单的&后台运行不同,nohup会忽略SIGHUP信号,这是终端断开时系统向关联进程发送的终止信号。

标准流重定向是nohup的另一个关键特性:

  • 标准输入(stdin):文件描述符0
  • 标准输出(stdout):文件描述符1
  • 标准错误(stderr):文件描述符2

当你不指定重定向时,nohup默认会将stdout和stderr合并输出到当前目录的nohup.out文件。但这种方式在生产环境中往往不够灵活,我们需要更精细的控制。

# 基础用法示例
nohup ./data_sync.sh > sync.log 2>&1 &

这个经典命令的每个部分都值得拆解:

  • > 将stdout重定向到sync.log
  • 2>&1 将stderr重定向到stdout(即同样写入sync.log)
  • & 使命令在后台运行

注意:重定向顺序至关重要。错误的2>&1 > file会导致stderr仍然输出到终端,因为此时stdout尚未重定向到文件。

2. 五种实战场景与优化方案

2.1 日志分割与轮转策略

长期运行的进程会产生巨大的日志文件,我们需要预防磁盘被撑爆。结合logrotate工具可以实现自动化日志管理:

# 按日期分割日志
nohup ./server.sh >> server_$(date +%Y%m%d).log 2>&1 &

# logrotate配置示例(/etc/logrotate.d/nohup)
/path/to/server_*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    create 644 root root
}

对于实时性要求高的场景,可以使用tail -f监控最新日志:

tail -fn 100 server_$(date +%Y%m%d).log

2.2 资源监控与异常告警

后台任务可能悄无声息地耗尽资源。这套组合命令能帮你实时监控:

# 启动任务并记录PID
nohup ./batch_process.sh > /dev/null 2>&1 & echo $! > process.pid

# 监控脚本(monitor.sh)
#!/bin/bash
PID=$(cat process.pid)
while true; do
    CPU=$(ps -p $PID -o %cpu | tail -1)
    MEM=$(ps -p $PID -o %mem | tail -1)
    echo "$(date) CPU:${CPU}% MEM:${MEM}%" >> usage.log
    [ $CPU -gt 90 ] && alert "CPU超过阈值!"
    sleep 60
done

2.3 输出静默与黑洞设备

当不需要任何输出时,/dev/null这个特殊设备可以充当"黑洞":

nohup ./daemon.sh > /dev/null 2>&1 &

对于只需要保留错误日志的场景:

nohup ./critical_task.sh > /dev/null 2> error.log &

2.4 会话持久化与终端分离

tmux或screen这类终端复用器比nohup更适合交互式任务:

# 使用tmux创建持久会话
tmux new -s long_task
./interactive_script.sh
# 按Ctrl+B然后D分离会话

# 稍后重新连接
tmux attach -t long_task

但对于非交互式脚本,nohup仍是更轻量的选择。

2.5 自动化与crontab集成

将nohup与crontab结合实现定时任务:

# crontab -e
0 3 * * * /usr/bin/nohup /scripts/nightly_backup.sh > /logs/backup_$(date +\%Y\%m\%d).log 2>&1

为避免日志文件权限问题,建议在脚本内处理重定向:

#!/bin/bash
LOG_FILE="/logs/backup_$(date +%Y%m%d).log"
exec > >(tee -a "$LOG_FILE") 2>&1
# 实际备份命令...

3. 常见陷阱与解决方案

问题1:nohup.out权限不足 当在非家目录执行时可能遇到:

nohup: ignoring input and appending output to 'nohup.out'
nohup: failed to run command '...': Permission denied

解决方案是指定可写目录:

nohup command > $HOME/nohup.out 2>&1 &

问题2:Python缓冲输出 Python脚本的输出可能不会立即刷新:

nohup python script.py > output.log 2>&1 &  # 可能延迟
nohup python -u script.py > output.log 2>&1 &  # -u禁用缓冲

问题3:SSH超时中断 即使使用nohup,长时间SSH会话也可能被中断。推荐组合方案:

ssh server.com "nohup /path/to/script.sh > /path/to/log 2>&1 &"

4. 高级技巧:文件描述符操作

对于复杂场景,可以手动控制文件描述符:

# 将不同级别的日志分开记录
nohup ./app.sh \
    > info.log \     # stdout
    2> error.log \   # stderr
    3> debug.log &   # 自定义描述符

# 在脚本中使用:
echo "Info message" >&1
echo "Debug data" >&3

5. 替代方案与工具选型

虽然nohup简单易用,但在复杂场景下可能需要更专业的工具:

工具优势适用场景
systemd完善的进程管理、自动重启机制生产环境持久化服务
supervisor多进程管理、Web界面开发测试环境
tmux/screen会话保持、交互式操作需要人工干预的长时任务
disown将已有作业转为后台持久运行临时切换运行方式

例如用systemd管理服务:

# /etc/systemd/system/my_service.service
[Unit]
Description=My Long Running Script

[Service]
ExecStart=/path/to/script.sh
Restart=always
User=myuser

[Install]
WantedBy=multi-user.target

启动服务:

sudo systemctl enable my_service
sudo systemctl start my_service

在实际运维中,我曾遇到一个典型场景:数据迁移脚本需要运行18小时,期间网络波动可能导致SSH断开。最初使用简单的nohup方案,后来发现脚本异常退出时无法自动恢复。最终采用systemd的Restart机制,配合自定义监控脚本,实现了真正的"一劳永逸"。这也印证了工具选型需要根据具体需求不断演进。

Ubuntu音频开发必学:arecord/aplay底层原理与工业级实战 ALSA(Advanced Linux Sound Architecture)是Linux系统音频处理的核心架构,其原生命令arecord和aplay提供对声卡硬件的直接访问能力,绕过PulseAudio等中间层,实现低延迟、高确定性的录音与播放。理解hw: vs plughw:设备寻址机制、S16_LE等PCM格式规范、采样率与通道数的硬件契约关系,是保障语音识别、声源定位、边缘音频采集等场景稳定运行的技术基础。在嵌入式设备、无GUI服务器及USB麦克风阵列(如ReSpeaker)等真实工程中,合理使用a 阅读详情

相关推荐

Linux进程管理实战:从ps/top到/proc的深度诊断与安全干预

进程管理是Linux系统运维与安全分析的核心能力,本质是通过PID、PPID、UID、WCHAN等关键字段理解进程生命周期、资源占用与内核状态。其原理根植于/proc文件系统提供的实时内核视图,技术价值在于支撑故障定位、性能优化与入侵检测。典型应用场景包括CPU/内存异常排查、僵尸进程溯源、容器逃逸识别及恶意进程取证。本文聚焦ps和top的高阶用法——如ps -eo自定义字段组合、top交互式线程与WCHAN分析、htop/atop协同回溯,并深度融合/proc/status、/proc/stat、/pro

weixin_30613727的博客 428

Linux下进程使用nohup或daemon进入后台CPU利用率100%

Linux下进程使用nohup或daemon进入后台CPU利用率100% 检查一下socket监听 是否把stdin加入select了

雜貨鋪 3348

Linux部署SpringBoot项目:从能跑到稳跑的生产级实践

SpringBoot应用部署本质上是Java服务在Linux生产环境中的生命周期管理问题。其核心原理涉及JVM进程管控、系统服务化封装、网络流量调度与安全隔离。技术价值在于实现服务高可用、配置可审计、故障可自愈,支撑微服务架构落地与云原生演进。典型应用场景包括单体应用上线、企业私有化交付、信创环境适配(如麒麟/统信+ARM64)及CI/CD流水线集成。本文聚焦systemd守护、外置配置治理、防火墙与SELinux协同、Nginx反向代理等关键环节,系统拆解Linux下SpringBoot项目从本地jar包

413

Linux后台任务管理神器:nohup命令的5个实用技巧与常见问题解决

本文详细介绍了Linux系统中nohup命令的5个实用技巧与常见问题解决方案。从基础用法到高级日志管理、进程监控技巧,再到生产环境的最佳实践,帮助运维工程师和开发者高效管理后台任务,避免因网络中断导致的任务失败。特别针对nohup的日志输出、进程监控和异常处理提供了专业级解决方案。

weixin_28432777的博客 258

Ubuntu 20.04 上部署生产级 Discord Bot 的完整实践

Discord Bot 本质是基于 WebSocket 和 REST API 的实时消息自动化服务,其核心原理在于事件驱动架构与异步 I/O 协同工作。在 Linux 生产环境中,Bot 的稳定性不取决于语法简洁性,而依赖 Python 虚拟环境隔离、systemd 进程守护及安全凭证管理等系统级保障。技术价值体现在降低运维成本、实现 7×24 小时无人值守告警响应与跨平台协作集成。典型应用场景包括 Jenkins 构建失败自动通知、GitLab MR 状态同步、SaaS 产品轻量交互入口等。本文聚焦 Ub

weixin_30595035的博客 423

SpringBoot+Mybatis学生就业管理系统:毕业设计与实战指南

在Java Web开发领域,SpringBoot与Mybatis是构建企业级应用的主流技术组合。SpringBoot通过约定大于配置的理念和自动装配机制,极大地简化了项目初始化和部署流程,使开发者能更专注于业务逻辑的实现。Mybatis作为一款优秀的持久层框架,以其灵活的SQL编写能力和对复杂查询的良好支持,在需要精细控制数据库操作的场景中表现出色,其动态SQL功能能优雅处理多条件组合查询。这两项技术的结合,为开发高效、可维护的后端服务提供了坚实的技术基础,其技术价值在于平衡了开发效率与系统性能。这种组合广

benben 475

【Linux进阶篇】Linux后台运行避坑指南:nohup、& 用法及Systemd守护进程实操

本文介绍了Linux进程管理的核心技巧,包括进程查看、控制和后台守护。通过ps命令(ps -ef侧重进程关系,ps aux侧重资源占用)和top命令(实时监控系统负载)查看进程状态。使用kill命令(-15优雅终止、-9强制终止、-1重载配置)控制进程,并掌握前后台切换(&、jobs、fg、bg)提高操作效率。最后讲解如何用nohup和Systemd守护后台进程,避免终端关闭导致进程终止。这些技巧是Linux运维和开发的必备技能,建议收藏并实操掌握。

m0_58782205的博客 1470

高校技术转移办公室人员如何快速评估成果的市场转化潜力?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Linux新手必学:nohup命令完全指南

nohup是"no hang up"的缩写,意思是"不挂断"。想象一下,你通过SSH连接到服务器运行一个耗时很长的任务,如果直接运行,一旦断开连接,任务就会中断。作为刚接触Linux的新手,这个命令真的帮我解决了不少实际问题,特别是当需要长时间运行任务的时候。它提供了在线的Linux环境,不需要本地安装就能直接练习命令,对新手特别友好。程序本身需要终端交互:有些程序需要终端输入,这种情况nohup可能不适用。最后,如果你想快速体验Linux命令的实际效果,可以试试。- 命令可以是任何你想在后台运行的程序。

OnyxPanther23的博客 853

科技中介服务机构如何借助平台提升服务效率与专业性?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

政府科技管理者如何实现科技成果转化的全流程监管?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

新手必学:nohup 启动 bash 后台任务的完整操作流程

nohup 是 Linux 系统中一个常用的命令,用于在后台运行任务。即使你注销终端或关闭会话,任务也能继续执行,非常适合运行长时间脚本或程序。下面我将以新手友好的方式,一步步解释完整操作流程。所有步骤基于标准 bash 环境,确保真实可靠。通过以上步骤,你可以轻松使用 nohup 管理后台任务。如果有具体问题(如脚本错误),提供更多细节,我可以进一步帮助!

2501_93877824的博客 535

别再手动写ZPL了!用C#和斑马官方SDK搞定ZT410 RFID打印机(附中文乱码解决方案)

本文详细介绍了如何使用C#和斑马官方SDK驱动ZT410 RFID打印机,解决中文乱码和RFID数据写入等常见问题。通过实战指南,开发者可以快速掌握从基础连接到高级调试的全流程,提升打印效率和可靠性。特别适用于物流、零售和资产管理领域的应用。

weixin_29267307的博客 211

nohup 停止_nohup 使用与进阶

nohup 使用与进阶nohup命令是Linux上运行程序必学的命令之一。使用该命令运行程序可以忽略挂断信号。一般最后配合&,使程序在后台执行,并且在终端退出后不打断程序执行。nohup <command> &nohup运行时返回程序运行的进程号,命令默认输出到当前目录下的nohup.out文件。$ nohup python temp.py &[1] ...

weixin_30767945的博客 1万+

树莓派使用 OLED 屏显示图片及文字

树莓派默认是不带显示屏的,如果想要查看系统的一些信息,需要使用电脑登录到树莓派,或者通过 HDMI 连接外接显示器查看。这样做总是有点麻烦,我们可以通过外接一个 OLED 屏来显示一些关键参数或者图片。本文将详细介绍操作方法。 OLED 模组介绍 OLED 屏主要有两种:128×32 和 128×64 ,主要颜色是白、黄、蓝。OLED 屏的特点是功耗低,价格便宜,使用 I2C 接口与主机连接。本文所使用的是 128×64 尺寸的屏幕,外形如下: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直

码到成功 3738

Wiley:International Journal for Numerical Methods in Biomedical Engineering投稿流程

中间过程省略,这个出版社很人性化,投稿的web UI也很好看。上传word之后,一步步跟着走就行,不用填太多东西。不要最后在最后检查阶段,重新上传word文件,这样会导致,之前针对word的操作全部改变。

Everyday try to become better -Kobe Bryant 2532

Linux新手入门:从虚拟机搭建到命令行实战全攻略

操作系统是计算机系统的核心软件,负责管理硬件资源和为应用程序提供运行环境。其工作原理在于通过内核进行进程调度、内存管理和设备驱动等核心任务。掌握操作系统原理对于理解计算机如何工作至关重要,是从事软件开发、运维等IT领域的基础。在众多操作系统中,Linux以其开源、稳定和高可定制性著称,尤其在企业服务器、云计算和嵌入式领域应用广泛。对于初学者而言,通过虚拟机技术搭建安全的Linux实验环境是高效的学习路径。本文聚焦于Linux入门实践,详细介绍了如何使用VMware Workstation Pro创建虚拟机、

weixin_34038293的博客 441

YOLOv8-seg模型后处理实战:从输出解析到mask生成的完整流程

本文详细解析了YOLOv8-seg实例分割模型的后处理完整流程,从理解output0与output1的双输出结构,到实现检测框的置信度过滤、坐标转换与NMS,再到核心的掩膜生成数学原理与矩阵乘法实现。文章深入探讨了如何将掩膜系数与原型掩膜库结合,生成像素级分割结果,并提供了掩膜上采样、边缘优化、性能提升及解决实际应用难题的实战方案。

xgboost6farmer的博客 313

你应该知道的Linux技巧

原文链接:http://coolshell.cn/articles/8883.html 基础 学习 Bash 。你可以man bash来看看bash的东西,并不复杂也并不长。你用别的shell也行,但是bash是很强大的并且也是系统默认的。(学习zsh或tsch只会让你在很多情况下受到限制) 学习 vim 。在Linux下,基本没有什么可与之竞争的编译辑器(就算你是一

大魁的专栏 2216

open-mmlab / mmpose安装、使用教程

mmpose安装、使用教程mmpose安装教程1. 安装mmcv-full2. 安装MMPose2. 安装mmdet使用教程1. 预测图片2. 预测视频 mmpose mmpose是商汤旗下有又一款好用的工具箱,主要是针对姿态识别任务开发的,包括人体姿态识别和动物姿态识别。里面继承很多现成的网络可以供大家使用,并且提供了训练好的权重。用户可以更具自己的需求训练自己的数据,或者直接应用他们的结果,反正就是很全面啦!!!! github连接:https://github.com/open-mmlab/mmpos

CharmsLUO的博客 1万+

多算法数据预测——BP、ELM、LSTM、BiLSTM和SAELSTM,附Matlab源码

本文将为大家介绍基于BP、ELM、LSTM、BiLSTM和SAELSTM多种算法的数据预测,并提供相应的Matlab源码。SAELSTM算法是一种结合自动编码器和LSTM神经网络的深度学习方法,用于时间序列数据预测。ELM算法是一种单层前向神经网络,在单次训练过程中直接产生输出权重,从而具有快速学习和良好推广性能。多算法数据预测——BP、ELM、LSTM、BiLSTM和SAELSTM,附Matlab源码。总体来看,采用多种算法进行数据预测可以提高预测准确率,并可根据不同场景选择适合的算法。

qq_39605374的博客 855

java程序员必须要学会的linux命令总结

1.查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件。 find . -name “*.xml” 递归查找所有的xml文件 2.查看一个程序是否运行 ps –ef|grep tomcat 查看所有有关tomcat的进程 3.终止线程 kill -9 19979 终止线程号位19979的进程 pkill -9 java 批量终...

程序员阿华的博客 295

两组相机(或三维点)对齐方法介绍及实现代码(求解相似变换,包含旋转R、平移t、尺度s)

  这个变换用于将生成的稀疏重建场景对齐到真值上。由于SfM(Structure from Motion,运动恢复结构)求解的结果是尺度未定的,所以重建场景与真值之间不仅会相差一个旋转与平移,还会存在尺度缩放。待求解的问题可以描述为:已知一组相机(个数为m)的位姿真值Rgt、tgt和预测位姿Rpred、tpred,现要将预测值对齐到真值上。它们之间会相差一个相似变换Msimilarity,包括尺度s、旋转量R、平移量t,可以根据如下步骤进行求解:    1 求解旋转R   首先计算所有m个相机的位姿差异总和

zeeq的博客 3922

进程和计划任务管理

进程和计划任务管理

超级运云 1055

飞牛fnNAS虚拟机开启OVS导致失联的解决

摘要:用户在使用飞牛NAS时发现开启OVS网络功能后导致NAS失联。通过多种尝试(包括开关OVS、更换系统版本、手工配置、更换网卡、处理器检查等)后发现,OVS启用状态下DHCP无法获取IP地址,手动设置IP可暂时恢复网络。但重启后问题依旧,初步判断为OVS功能存在bug。目前临时解决方案是在需要时手动开关OVS,或考虑其他虚拟化方案。用户计划后续探索替代方案,并等待官方修复该问题。

dgnankai的专栏 4323

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Linux运维:psutil和paramiko和request

requests 是 Python 最流行的 HTTP 客户端库,用一行代码就能发送复杂的 HTTP 请求调用各类系统的 API 接口(监控、告警、CMDB)简单的网页爬虫(爬取监控数据、日志)企业微信/钉钉/飞书机器人告警自动化测试接口可用性。

weixin_73615442的博客 538

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: CentOS7下Ollama部署全攻略:从安装到自定义端口配置(附国内加速技巧)
下一篇: FAST-LIVO实战:如何在树莓派上部署激光视觉里程计(附避坑指南)
mmm90
博客等级 码龄14年 116粉丝 1070原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值