上位机知识篇---服务器脚本一直运行方法 - 详解

news/2025/10/4 12:37:25/文章来源:https://www.cnblogs.com/yxysuanfa/p/19125483

核心问题:为什么终端一关,脚本就停了?

想象一下,你通过远程桌面(SSH终端)登录到服务器,运行了一个脚本。这个脚本就像是你亲手打开的一个普通电脑程序

当你断开远程桌面(退出SSH)时,就相当于把服务器的“显示器、键盘和鼠标”都拔掉了。操作系统会觉得:“哦,用户已经下班了,那他打开的这些程序也可以关掉了。” 于是它会发送一个“关闭”信号,把你运行的脚本给终止了。

我们的目标就是:让脚本摆脱这个“终端窗口”的束缚,把它变成一个在后台独立运行的“系统服务”或“守护进程”。


方法一:nohup 命令 - “拔掉电源线也能工作”

这是最简单、最快捷的方法,适合临时性的任务。

  • 通俗理解:你告诉脚本:“嘿,即使我拔掉电源线(退出终端),你也要装作没听见,继续干你的活。” 同时,它会把脚本的所有输出(比如 print 语句)自动保存到一个文件里,以免丢失。

  • 使用方法

    nohup python your_script.py &
    • nohup:是 no hang up 的缩写,意思就是“不挂断”。

    • &:这个符号表示“在后台运行”。

    • 运行后,它会告诉你一个 进程ID(PID),比如 [1] 12345,这个 12345 就是进程号,可以用来后续管理。

    • 脚本的所有输出默认会保存在当前目录下的 nohup.out 文件里。

  • 如何查看和停止?

    • 查看tail -f nohup.out (实时查看输出日志)

    • 停止:先找到进程ID ps aux | grep your_script.py,然后 kill 12345

  • 优缺点

    •  优点:超级简单,无需配置。

    •  缺点:脚本不是“服务”,服务器重启后不会自动拉起;不适合管理复杂的长期服务。


方法二:tmux 或 screen - “虚拟会议室”

这两个工具功能类似,我们以更流行的 tmux 为例。

  • 通俗理解:你在服务器上创建了一个永不停息的“虚拟会议室”。你在这个会议室里运行脚本,然后你可以随时“离开会议室”(断开连接),但会议室里的所有工作都会照常进行。等你下次回来,可以再“进入会议室”,看到一切如初。

  • 使用方法

    1. 安装tmux (如果服务器没有):sudo apt-get install tmux (Ubuntu/Debian)

    2. 创建一个新会议室tmux new -s my_script_room

    3. 在会议室里正常运行脚本python your_script.py

    4. “离开”会议室:按下 Ctrl + B,松开后,再按 D 键。现在你回到了服务器的普通终端,但脚本仍在 my_script_room 会议室里运行。

    5. 下次回来“进入”会议室tmux attach -t my_script_room

  • 如何停止?
    进入会议室后,直接按 Ctrl + C 停止脚本,然后输入 exit 关闭会议室。

  • 优缺点

    •  优点:非常灵活,可以实时看到脚本的输出和状态,就像它从来没停过一样;适合调试和交互式任务。

    •  缺点:同样不是“服务”,服务器重启后会议室就没了;更依赖于用户的手动管理。


方法三:Systemd - “把它变成系统服务”(推荐用于生产环境)

这是最专业、最可靠的方法,用于管理需要一直运行的关键服务(比如Web服务器、数据库、你的核心业务脚本)。

  • 通俗理解:就像你把一个程序图标拖到Windows的“启动”文件夹里,开机就能自动运行。Systemd是Linux系统的“大管家”,它负责启动、停止和管理所有系统服务。你把脚本交给它,它就把它当作一个系统级别的服务来管理:开机自启、崩溃重启、统一日志管理等。

  • 使用方法

    1. 创建一个服务配置文件(例如:my_python_service.service

      sudo nano /etc/systemd/system/my_python_service.service
    2. 写入以下配置内容(根据你的情况修改):

      [Unit]
      Description=My Python Script  # 服务描述
      After=network.target          # 在网络服务启动后再启动本脚本[Service]
      Type=simple
      User=ubuntu                   # 用哪个用户身份运行,很重要!
      WorkingDirectory=/home/ubuntu/my_scripts  # 脚本所在目录
      ExecStart=/usr/bin/python3 /home/ubuntu/my_scripts/your_script.py  # 启动命令
      Restart=always                # 崩溃时自动重启
      RestartSec=5                  # 重启前等待5秒[Install]
      WantedBy=multi-user.target    # 表示在系统多用户模式下启用
    3. 让Systemd重新加载配置

      sudo systemctl daemon-reload
    4. 启动你的服务

      sudo systemctl start my_python_service
    5. 设置开机自启

      sudo systemctl enable my_python_service

  • 如何管理?(一套万能命令)

    • 启动sudo systemctl start my_python_service

    • 停止sudo systemctl stop my_python_service

    • 重启sudo systemctl restart my_python_service

    • 查看状态sudo systemctl status my_python_service (这个最常用!

    • 查看实时日志sudo journalctl -u my_python_service -f

  • 优缺点

    •  优点极其强大和稳定;自动重启;开机自启;有完善的生命周期管理;日志统一收集。

    •  缺点:需要 root 权限来配置;配置稍复杂。


方法四:Supervisor - “专职进程保姆”

这是一个专门用来管理进程的工具,介于 tmux 的灵活和 Systemd 的强大之间。

  • 通俗理解:你雇了一个“专职保姆”。你把脚本交给它,并下达指令:“这个孩子(脚本)你给我看好了,如果他摔倒了(崩溃了),马上把他扶起来(重启)。” Supervisor 会 7x24 小时盯着你的进程。

  • 使用方法

    1. 安装sudo apt-get install supervisor

    2. 创建配置文件(例如:my_script.conf)在 /etc/supervisor/conf.d/ 目录下。

    3. 写入配置

      [program:my_python_script]  ; 你的服务名
      command=python3 /path/to/your_script.py  ; 启动命令
      directory=/path/to/your_script           ; 工作目录
      user=ubuntu                              ; 运行用户
      autostart=true                           ; 是否自启
      autorestart=true                         ; 是否自动重启
      stderr_logfile=/var/log/my_script.err.log ; 错误日志
      stdout_logfile=/var/log/my_script.out.log ; 输出日志
    4. 让Supervisor重新加载并运行

      sudo supervisorctl reread
      sudo supervisorctl update
      sudo supervisorctl start my_python_script
  • 如何管理?

    • sudo supervisorctl status:查看所有管理的进程状态。

    • sudo supervisorctl stop my_python_script:停止。

    • sudo supervisorctl restart my_python_script:重启。

  • 优缺点

    •  优点:配置比 Systemd 更直观,专门为管理进程而生;监控功能强大;不需要 root 权限也能管理部分功能(通过配置)。

    •  缺点:需要额外安装一个软件。


总结与选择建议

方法适用场景优点缺点
nohup临时测试,运行一个几个小时的数据处理脚本。最简单,零配置不稳定,不易管理
tmux/screen开发/调试,需要实时观察输出的长任务。灵活,可交互非服务化,依赖会话
Systemd生产环境,公司网站、API服务、核心后台任务。强大稳定,专业配置需root权限
Supervisor生产环境(特别是非root用户),或需要精细控制进程。功能专一,配置直观需额外安装

给你的最终建议:

  • 如果你是临时跑个脚本,用 nohup 或 tmux

  • 如果你做开发,需要看实时日志,用 tmux

  • 如果你的脚本是公司的重要服务,需要永远运行毫不犹豫地选择 Systemd。这是现代Linux服务器的标准和最佳实践。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/927135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

个人网站域名取名chenqinghua wordpress

题目描述: 小红拿到了一个数组,初始数组为空,她希望你实现以下两种操作: 1. 输入x,y,将x插入在元素y的右边。保证此时数组中没有元素等于x,且数组中存在一个y。特殊的,如果将x插入在数组的最左边&#xff0…

python+vue在线视频课程学习系统设计(源码+文档+调试+基础修改+答疑) - 详解

python+vue在线视频课程学习系统设计(源码+文档+调试+基础修改+答疑) - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fa…

DeepSeek V3.1-Terminus、阿里 Qwen3-Max、ChatGPT Pulse 同周登场!| AI Weekly 9.22-9.28 - 实践

DeepSeek V3.1-Terminus、阿里 Qwen3-Max、ChatGPT Pulse 同周登场!| AI Weekly 9.22-9.28 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block …

wejianzhan是什么网站企业解决方案参考网站

背景:写的算法合并到项目组代码,编译发现一些以前没积累过的错误,这里记录下,也供大家参考。 一、问题1 // 每个类都有单独的.h .cpp class A; class B : public A {// ... }; class C : public A {// ... };若在B.h中引用了一个…

网站建设修饰商品wordpress批量导入页面

文章目录 🍋引言🍋队列的定义🍋队列的实现🍋队列的应用🍋练习题🍋结语 🍋引言 队列(Queue)是计算机科学中一种重要的数据结构,它常用于各种应用程序中&#x…

公司做了网站怎么做推广本地做织梦网站

原文来自http://note.youdao.com/share/web/file.html?id236896997b6ffbaa8e0d92eacd13abbf&typenote 我怕链接会失效,故转载此篇文章。通过这篇文章,我对之前疑惑的地方有了直观的理解,很多地方并没有自己动手实践,所以这篇…

【做题记录】CF2600左右有趣的思维题1

A. Latin Square 考虑维护三元组 \((i,j,a_{i,j})\)。例如:R 操作就是变成了 \((i,j+1,a_{i,j})\);I 操作就是变成了 \((i,a_{i,j},j)\)。时间复杂度 \(O(m+n^2)\)。Code #include<bits/stdc++.h> #define ll …

pdf翻译

pdf翻译 https://github.com/Byaidu/PDFMathTranslate?tab=readme-ov-file

OpenEuler 25.03 installed UKUI but cant run msedge and chrome

[root@OpenEulerWD Desktop]# pwd /root/Desktop[root@OpenEulerWD Desktop]# cat google-chrome.desktop microsoft-edge.desktop | grep stable Exec=/usr/bin/google-chrome-stable %U Exec=/usr/bin/google-chrom…

网站为什么被百度k了关于wordpress更新时无法创建目录

Spring Boot 注解 PostConstruct 介绍 文章目录 Spring Boot 注解 PostConstruct 介绍一、基本介绍二、PostConstruct 的执行时机Spring Bean 的生命周期PostConstruct 的确切执行时机执行顺序示例重要注意事项 三、使用场景及代码示例1. 初始化资源&#xff1a;比如打开数据库…

实用指南:iPhone美区账号登录指南:轻松下载ChatGPT应用

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

德国诺莫斯手表网站电子商务网站建设与管理习题答案

http://www.imooc.com/article/285246?block_idtuijian_wz 最近在设计一款进销存系统的时候&#xff0c;遇到一个分类的设计问题&#xff0c;就是如何将分类设计成数据库里的表&#xff0c;怎么样设计才比较灵活&#xff1f; 举个例子&#xff0c;一级分类&#xff1a;生鲜类&…

推广方案怎么写模板网站内容seo

汇川Easy系列以太网通讯中(MODBUSTCP,plc做主站),终于可以不用使用指令就可以完成了,全程通过简单的配置就可通讯。本文将通过EASY系列PLC与调试助手之间完成此操作。具体演示如下; 关于主站和从站的介绍 A/请求:即主动方 向被动方发送的一个要求的信息。 B/主站:发…

网络调整config.xml的android.mk解析

网络调整config.xml的android.mk解析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monac…

【Android】RuntimeShader 应用

1 简介 ​ RuntimeShader 是 Android 13(T)中新增的特性,用于逐像素渲染界面,它使用 AGSL(Android Graphics Shading Language)编写着色器代码,底层基于 Skia 图形渲染引擎。官方介绍详见 → RuntimeShader。…

一个公司多个网站做优化程序开发平台

1&#xff0c;已经创建了通用树结构&#xff0c;有必要创建另一种树结构吗&#xff1f; 2&#xff0c;简化树就直接减少结点中孩子的数量&#xff0c;但是这样树还能通用吗&#xff1f; 3&#xff0c;通用树结构的回顾&#xff1a; 1&#xff0c;双亲孩子表示法&#xff1a; 1&…

【Rive】rive-android源码分析

1 前言 ​ 本文基于 rive-android 10.1.0 进行源码分析,主要介绍 Rive 的渲染类型、RendererType 透传流程、Surface 透传流程、渲染流程、启动渲染流程、暂停渲染流程等内容。 ​ rive-android 类图框架如下。…

惠州专业网站建设价格wordpress网站维护教程

技术复盘--git 资料地址原理图安装配置基本命令分支命令对接gitee练习:远程仓库操作 资料地址 学习地址-B站黑马&#xff1a;https://www.bilibili.com/video/BV1MU4y1Y7h5 git官方&#xff1a;https://git-scm.com/ gitee官网&#xff1a;https://gitee.com/ 原理图 说明&am…