在Linux 上如何让 Python 脚本在后台运行

在 Linux 系统中,可以通过多种方式让 Python 脚本在后台运行,以下是几种常见的方法:


方法 1:使用 & 符号(后台运行)

直接在命令末尾加上 &,让脚本在后台运行:

python3 your_script.py &
  • 特点
    • 脚本会在后台执行,但关闭终端后可能会终止。
    • 输出仍然会打印到终端(可能干扰当前会话)。

如何关闭后台任务

  1. 查看后台任务:
    jobs -l
    
  2. 终止任务:
    kill %1  # 1 是任务编号
    

方法 2:使用 nohup(终端关闭后仍运行)

nohup(no hang up)可以让脚本在终端关闭后继续运行:

nohup python3 your_script.py > output.log 2>&1 &
  • 参数说明
    • > output.log:将标准输出重定向到 output.log
    • 2>&1:将标准错误(stderr)也重定向到 output.log
    • &:后台运行。

如何停止 nohup 任务

  1. 查找进程 ID(PID):
    ps aux | grep "your_script.py"
    
  2. 终止进程:
    kill -9 <PID>
    

方法 3:使用 screentmux(会话管理)

screen 方式

  1. 创建新会话:
    screen -S python_session
    
  2. 运行脚本:
    python3 your_script.py
    
  3. Ctrl + A,然后 D 脱离会话(detach)。
  4. 重新进入会话:
    screen -r python_session
    
  5. 关闭会话:
    exit
    

tmux 方式(推荐)

  1. 创建新会话:
    tmux new -s python_session
    
  2. 运行脚本:
    python3 your_script.py
    
  3. Ctrl + B,然后 D 脱离会话。
  4. 重新进入会话:
    tmux attach -t python_session
    
  5. 关闭会话:
    exit
    

方法 4:使用 systemd(系统服务,长期运行)

适用于需要长期运行的后台服务:

  1. 创建服务文件:
    sudo nano /etc/systemd/system/python_script.service
    
  2. 写入以下内容:
    [Unit]
    Description=Python Script Service
    After=network.target
    
    [Service]
    User=your_username
    ExecStart=/usr/bin/python3 /path/to/your_script.py
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    
  3. 启用并启动服务:
    sudo systemctl daemon-reload
    sudo systemctl enable python_script
    sudo systemctl start python_script
    
  4. 查看状态:
    sudo systemctl status python_script
    
  5. 停止服务:
    sudo systemctl stop python_script
    

总结

方法适用场景终端关闭后是否运行推荐指数
&临时后台❌ 会终止⭐⭐
nohup长期运行✅ 继续运行⭐⭐⭐
screen/tmux会话管理✅ 继续运行⭐⭐⭐⭐
systemd系统服务✅ 长期运行⭐⭐⭐⭐⭐

推荐选择

  • 临时测试 → &nohup
  • 需要会话管理 → tmux/screen
  • 生产环境长期运行 → systemd

在使用 nohup 运行 Python 脚本后,可以通过以下几种方式查看其进程 ID(PID),并进行管理:


1. 直接查看 nohup 输出

运行 nohup 时,它会显示进程 ID(PID):

nohup python3 your_script.py > output.log 2>&1 &

输出示例:

[1] 12345  # 12345 就是 PID
  • [1] 是作业编号(job ID),12345 是进程 ID(PID)。

2. 使用 jobs 查看(仅当前终端有效)

如果仍在同一个终端,可以查看后台任务:

jobs -l

输出示例:

[1]+ 12345 Running  nohup python3 your_script.py > output.log 2>&1 &
  • 12345 是 PID,[1] 是作业编号。

⚠️ 注意:如果关闭终端或新开终端,jobs 将无法显示。


3. 使用 pspgrep 查找进程

方法 1:ps aux | grep
ps aux | grep "your_script.py"

输出示例:

your_user  12345  0.0  0.1  12345  6789 pts/0  S    10:00   0:00 python3 your_script.py
  • 12345 就是 PID
方法 2:pgrep(更简洁)
pgrep -f "your_script.py"

直接返回 PID:

12345

4. 查看 nohup.out 或日志文件

如果 nohup 输出到文件(如 nohup.out 或自定义日志),可以检查是否有进程信息:

tail -f nohup.out  # 实时查看日志

5. 使用 lsof 查看相关进程

lsof | grep "your_script.py"

输出示例:

python3 12345 your_user  cwd   DIR   /path/to/script
  • 12345 是 PID。

如何终止 nohup 进程?

找到 PID 后,用 kill 终止:

kill -9 12345  # 强制终止

或优雅终止:

kill 12345     # 发送 SIGTERM

总结

方法命令示例适用场景
直接查看 nohup 输出nohup python3 script.py &刚运行时显示 PID
jobs -ljobs -l当前终端有效
ps aux | grepps aux | grep "your_script.py"通用方法,推荐
pgrep -fpgrep -f "your_script.py"快速获取 PID
lsoflsof | grep "your_script.py"查看文件关联的进程

推荐使用 ps aux | greppgrep -f,适用于所有情况!🚀

要在Linux系统上让Python脚本后台持续运行,你可以采用几种常用的方法: ### 使用 `nohup` 命令 `nohup`(即“no hang up”)可以让进程忽略挂断信号,在用户退出终端之后继续运行。 **操作步骤:** 1. 打开你的命令行界面。 2. 输入以下命令启动Python程序并添加`&`将它放到后台执行: ```bash nohup python3 your_script.py & ``` 3. 输出会被重定向到当前目录下的`nohup.out`文件中除非你指定其他地方保存输出内容。 如果不想生成默认的日志文件,则可以这样做: ```bash nohup python3 your_script.py > /dev/null 2>&1 & ``` 这会把标准输出和错误都丢弃掉。如果你想保留日志信息的话就把路径改为实际想存放的地方如`> my_log.txt`. ### 使用 `screen` 或者 `tmux` 这两个工具都可以创建脱离于物理连接而存在的虚拟控制台窗口,并能保持任务在其内独立地长期运作下去——即便网络中断或者关闭了SSH客户端也不会受到影响;再次连入时只需简单恢复先前的状态即可无缝衔接工作进度。 例如使用Screen的方式如下所示: 1. 安装 screen (通常已预装): - Ubuntu/Debian系: `sudo apt-get install screen` - CentOS/Fedora/RHEL 系统:`yum install screen`. 2. 创建一个新的 session 并在里面跑python代码: ```bash screen -S mysessionname # 开启一个新session叫做mysessionname. python3 your_script.py ``` 3. 按下 Ctrl+A 后松开再按 D 键可以从这个screen里脱离开来但是里面的工作还在进行着. 4. 要回到之前那个 screen 中查看状态就输入 `screen -r mysessionname`. ### 使用 `supervisord` 监控服务守护进程 对于需要更复杂管理的情况还可以选择安装 supervisor 来作为专门的服务控制器对各个应用程序包括但不限于Python应用提供自动重启等功能保障可靠性。 先按照官方文档说明设置好环境变量等依赖项然后编写相应的配置文件指明要监控的目标以及相应选项最后通过init.d机制或systemctl命令让其随开机自启。 以上就是在Linux环境中让Python程序长时间稳定后台运行的一些基本方法啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值