Linux服务器后台运行代码(即关闭终端后继续运行)

news/2024/11/18 13:49:50/

目录

一、nohup

1、nohup 和 & 的区别   

2、使用方法

二、screen

1、使用方法

2、其他命令


程序执行不受终端关闭或断网影响:两种方法 ① nohup;② screen

区别:使用 nohup 把程序放到后台,就再也无法切换程序到前台了,而screen可以。 

一、nohup

用途:不挂断地运行命令。我们在使用 Xshell 等工具执行 Linux 脚本时,有时候会由于网络问题,导致失去连接,终端断开,程序运行一半就意外结束了。这种时候,就可以用 nohup 指令来运行指令,使程序可以忽略挂起信号继续运行。

1、nohup 和 & 的区别   

  • &:是指在后台运行,当用户退出(挂起)的时候,命令自动跟着结束
  • nohup:不挂断的运行,注意并没有后台运行的功能,就是指用 nohup 运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开 SSH 连接都不会影响他的运行,注意了 nohup 没有后台运行的意思;& 才是后台运行
  • 因此将 nohup 和 & 结合使用,就可以实现使命令永久地在后台执行的功能

2、使用方法

 1)执行以下命令,将代码放入后台运行

# 后台运行(不受终端关闭干扰),将终端的输出重定向nohup.out文件(文件名字任取), 我一般使用log.txt
nohup python main.py > nohup.out 2>&1 &
  • 2>&1 解释:将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 run.log 文件中。(2>1 2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出; 2>&1 换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出)
  • 0 – stdin (standard input,标准输入)
  • 1 – stdout (standard output,标准输出)
  • 2 – stderr (standard error,标准错误输出)

2)执行以下命令,查询当前目录下查看 log.txt

tail -n 50 log.txt # 查看最后50行
head -n 50 log.txt # 查看开始50行

3)监测程序是否在正常运行中

ps -aux|grep chat.js # R就是在运行,显示done说明运行结束了
# 或者
ps -aux|grep python # 查看所有python进程

a: 显示所有程序
u: 以用户为主的格式来显示
x: 显示所有程序,不以终端机来区分 

4)杀掉进程

kill -9 PID号 # 停掉当前的父进程即可。-9 的意思是强制删除
# PID号可以用ps -aux|grep python查看,或者nvidia-smi查看

二、screen

1、使用方法

1)安装screen

yum -y install screen
# 或者
sudo apt-get install screen

2)创建一个screen任务

# 方式一: 创建有名字的screen任务,方便管理
screen -S task_name
# 方式二: 创建没有名字的screen任务
screen

执行完上述命令后,其实就进入了screen的shell环境 此时执行的操作 都是放在screen里的。(在这个终端界面运行的 命令,都可以离线运行。)

3)执行文件

# 进入窗口后 执行文件
# > output.log 2>&1 表示输出日志
python test.py > output.log 2>&1

4)杀死当前窗口或退出当前窗口

Ctrl+a+k # 杀死当前窗口
exit # 彻底退出窗口,屏幕显示[screen is terminating]即可

5)查看screen任务

screen -ls

如下的10899就是screen任务的pid:

[root@localhost ~]# screen -ls
There is a screen on:10899.task    (Attached)
1 Socket in /var/run/screen/S-root.

6)进入某个窗口

screen -r 会话名/会话id # 返回某个screen会话,若有重叠会话名,采用screen -r 会话id.会话名.

2、其他命令

  • 暂停窗口内运行的python程序
Ctrl + C # 停止程序运行
  • 其他
Ctrl+a+num # 切换至编号为num的窗口
ctrl+a+d # 先同时按ctrl+a,再按d,显示[detached],回到主会话,保留当前窗口。
screen -S your_screen_name/id -X quit # 删除会话

http://www.ppmy.cn/news/51939.html

相关文章

day4-Django的model

目录 1)setting文件配置 2)理解models 3)model定义 4)常用字段类型 5)常用属性 6)数据库迁移 7)Meta类 1)setting文件配置 sqlite数据库: DATABASES {default: {ENGINE: d…

Promise的状态和方法

Promise的状态 初始状态 -> pending   初始状态可以改变   在resolve 或者 reject 调用之前都处于这个状态 最终成功状态 -> fulfilled   执行 resolve 函数,状态改变为 fulfilled   执行 onFulfilled 函数 最终失败状态 -> rejected   执行 re…

安装配置 ZLMediaKit

一、ZLMediaKit 库简介 ZLMediaKit 是一个基于 C11 的高性能运营级流媒体服务框架 官方写的项目特点: 基于 C11 开发,避免使用裸指针,代码稳定可靠,性能优越。 支持多种协议(RTSP/RTMP/HLS/HTTP-FLV/Websocket-FLV/GB28181/MP4…

Android性能优化—ViewPagers + Fragment缓存优化

大家看标题,可能会有点儿懵,什么是ViewPagers,因为在很久之前,我们使用的都是ViewPager,但是现在更多的是在用ViewPager2,因此用ViewPagers(ViewPager、ViewPager2)来代替两者&#…

mysql常用规范

常用规范总结 表、存储过程、视图要有统一的命名规范,例如:表以t_打头,存储过程以sp_打头,视图以v_打头; 数据库和表的字符集用UTF8,如有emoji表情包的需求,必须使用UTF8MB4。 数字类型不要用…

Linux: 进程间通信机制

文章目录 1. 前言2. 进程间通信机制2.1 管道2.1.1 匿名管道2.1.2 popen() 和 pclose()2.1.3 命名管道 FIFO 2.2 消息队列2.3 共享内存2.4 信号量2.5 网络套接字2.6 UNIX套接字2.7 信号 3. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给…

京东商品列表数据采集(APP,H5端)

采集场景: 在京东搜索页 https://search.jd.com/Search 输入搜索,搜出后得到的多个商品列表数据。 征地: 商品名称、价格、评论数、店铺名称、店铺链接等字段。 采集结果: 采集结果可导出为Excel,CSV,HTML,数据库等格式。导出…

TensorFlow高阶API和低阶API

TensorFlow提供了众多的API,简单地可以分类为高阶API和低阶API. API太多太乱也是TensorFlow被诟病的重点之一,可能因为Google的工程师太多了,社区太活跃了~当然后来Google也意识到这个问题,在TensorFlow 2.0中有了很大的改善。本文…