服务器后台运行py脚本及如何查看及结束进程

这篇博客介绍了如何在服务器上使用nohup命令和&符号让Python脚本在断开shell连接后仍能继续后台运行。通过nohup python-udownload.py > test.log 2>&1 &,可以确保脚本不因用户退出而中断,并将输出重定向到test.log文件。此外,还讲解了如何使用ps和kill命令查看和结束后台进程,以及通过tail命令查看日志内容。
部署运行你感兴趣的模型镜像

在服务器上,为了退出终端,程序依然能够运行。如当我们在服务器上运行某一个脚本的时候,若是所需时间很长,我们就会希望人去睡觉,断开shell后,程序还可以继续在服务器后台运行,(我好像一个资本家哈哈),这个时候就要对命令做出些调整啦。

在一顿搜索下,找到如下方法:

(以下操作都是基于进入.py脚本所在文件夹后进行)

一、运行关键词:nohup和&

基础命令:该命令是运行目标脚本的基本命令,在断开连接后会停止运行

python download.py

可后台运行的命令:

nohup python -u download.py > test.log 2>&1 &

nohup    即no hang up,不要挂断

-u   代表程序不启用缓存,也就是把输出直接放到log中,没这个参数,log文件的生成会有延迟

python -u download.py   运行目标download脚本,且把输出直接放到log中

> test.log     命令启动后会在当前目录下自动生成一个名为test的.txt文件,将输出日志(即.py脚本运行中所产生的输出)保存到这个log中,便于查看运行过程与结果,如下图所示

2>1    2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;
2>&1   换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出.

&    最后一个& ,代表该命令在后台执行

(.py的结果存放位置还是会和基础命令相同,就比如我的download文件会把结果放在.py同目录文件夹下,后台运行后也是如此,test.log存放的只是原来会在控制面板显示的脚本print内容)

bear总结:

nohup代表不挂断,&表示后台运行,二者结合,就是.py脚本不会再断开shell后挂断,且会在后台继续运行

(若是服务器出现了问题,比如重启了或者坏了啥的,那就没办法了)

二、查看及结束进程

上述程序后太运行命令执行后会在终端显示进程序号,如下图所示:

查看及结束后台进程时依靠进程序号来是实现的,一个服务器会同时挂机多个程序,则需要查询全部的进程序号及后续操作

利用ps命令查看后台所有py运行程序的序号:

ps -ef |grep python 

结果如下图所示

找到对应的进程序号,结束(杀死)想要结束的进程

kill -9 进程序号

 利用tail命令查看日志内容,原本输入到test.log的内容就又被显示到屏幕上了(Ctrl+c可结束显示)

tail -f test.out

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 如何使代码在Linux服务器后台持续运行 #### 使用 `nohup` 和 `&` 为了确保Python程序能在后台持续运行受终端关闭影响,可以采用`nohup`命令配合`&`符号的方式启动程序。具体操作如下: 通过组合使用`nohup`和`&`可以在后台执行脚本并防止因终端关闭而导致的任务终止[^2]。 ```bash nohup python3 main.py & ``` 这条指令中的`nohup`意指“挂起”,即保持进程运行;而结尾处的`&`则表明此命令将在后台被执行。一旦发出上述命令,系统通常会返回一个类似于 `[1] 1111`的信息,其中`1111`表示新创建进程的ID编号。之后可以通过`ps aux | grep python`来确认程序的状态是否处于运行中(R)。 #### 利用 `screen` 工具 另一种更为灵活的方法是借助于`screen`工具实现多窗口管理和远程连接下的稳定服务部署。首先需确保已安装好`screen`软件包,可通过相应的包管理器完成安装工作,例如对于基于Red Hat/CentOS系统的机器可使用`yum install screen`,而对于Debian/Ubuntu类发行版,则应选用`apt-get install screen`进行安装。 进入`screen`环境后可以直接调用想要长期运行的应用程序,比如在这里是以`python3 main.py`为例。为了让应用能够在后台独立运作,在成功触发目标命令后应当按下`Ctrl+A`紧接着敲击字母`d`以分离当前session但仍保留内部活动的服务。如此这般即便用户注销账户或是网络中断也至于造成正在进行的工作被迫停止。如果日后需要结束由这种方式开启的服务流程,同样要先定位到对应的PID(进程标识符),再利用`kill -9 pid`强行杀死指定项。 #### 应急处理方案——作业控制机制 针对那些已经开始却忘记设置成守护模式的任务,还有机会采取措施加以挽救使其免遭意外断线干扰。主要思路在于运用Linux内置的作业控制系统将前台任务转至后台继续执行的同时赋予其抵抗SIGHUP的能力。具体做法涉及三个连续的操作环节:一是发送暂停请求给待调整的目标进程(`Ctrl+Z`)将其转换为job形式存在;二是借由`jobs`命令获取最新产生的job ID以便后续引用;三是依次下达`bg %jobid`以及`disown -h %jobid`两条指示分别用于激活背景化和平滑过渡到持久态[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值