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

目录

一、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
# 如果apt-get安装不了,可以尝试更新一下:sudo apt-get update

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 # 删除会话

你可能感兴趣的:(Linux服务器,linux,运维,服务器)