目录
2.2 使用screen -ls 获取当前通过screen命令正在后台执行的所有命令
2.4 在一个screen会话中通过ctrl命令进行后续操作
1、背景:面临的问题——云服务器在退出实例后程序就停止运行
为实现程序摆脱手边电脑的网络条件影响,不间断稳定运行,我们通常会购买云服务器(阿里云、腾讯云)以让程序在云端运转。但在初次接触到云服务器时,会面临一个入门问题:
远程登录状态下,使用python xx.py可以使云服务器上的代码正常运行,而一旦退出实例(比如退出浏览器),代码就停止运行,无法实现不间断运行的目的。
怎么办呢?
2、解决办法:screen的应用
使用linux系统的screen工具可以实现云端服务器程序后台运行并管理后台运行的各项程序。
2.1 使用screen <命令> 在后台执行命令
// 执行命令 screen <你的命令行代码> 以让程序在后台运行
// 举例来说,我希望服务器在当前文件夹运行test.py文件
// 可以在终端中执行下述代码
① 方式一:直接screen运行命令
screen python3 test.py // test.py文件的作用是每隔1s打印出当前数字
② 方式二:为此命令命别名,方便后续管理
screen -S my_test_project python3 test.py
此时终端会切换至新的窗口执行输出代码,如下图:
我们可以关闭浏览器,退出实例,程序依然会正常运行。
2.2 使用screen -ls 获取当前通过screen命令正在后台执行的所有命令
在退出实例后,重新登陆我们将会看到新的终端,此时有两个问题:
① 确认代码是否正常运行?
② 如何管理正常运行的后台程序呢?
均可以通过 screen -ls 命令
在终端输入下述命令并运行,将会返回当前screen正常后台运行的所有程序
// 获取当前在screen后台运行的所有命令
screen -ls
返回结果:
可以看到,这里显示有两个screen处于on的状态(也就是刚刚的python3 test.py命令)
其中各部分信息含义如下:
- 9217/10180:代表这个后台程序的PID,即进程ID——最重要,需要通过这个PID来管理此后台程序,比如停止运行等。
- iZbp.......:代表当前主机名,即这台计算机的名字
- (03/13/2024......):此命令开始运行的时间
2.3 使用screen -r -d <PID> 命令管理后台程序
需要对当前正在后台执行的命令进行管理时,我们可以通过 screen -r -d PID进入某个程序的面板,并通过screen -S PID -X quit的方式删除某个screen面板。
运行:
screen -r -d 9217
可以进入进程PID位9217的前述后台程序的screen面板,显示结果为:
可以看到程序如我们预期正常运行中。
运行:
screen -S 9217 -X quit
即可删除该面板,此时我们再运行screen -ls,可以发现:
仅有1个screen处于on的状态,也就意味着,PID9217这个后台程序被kill掉了,那个程序对应的代码也就停止运行。
2.4 在一个screen会话中通过ctrl命令进行后续操作
当通过screen -r PID进入到一个screen查看当前运行状态之后,我们往往需要执行“退出到新的终端”等操作,这个时候可以通过ctrl系列命令进行操作
- ctrl+a c:在screen会话中新建一个新的终端页面——慎用,会在这个screen中停止代码执行而创建一个新的终端。也就是这个screen还在,但是screen进去之后已经是一个新的终端了。
- ctrl+a d:从screen会话中分离出当前会话——这个用的最多,也就是从screen回到刚刚的那个终端。
- ctrl+a p:返回到前一个终端页面
- ctrl+a n:返回到后一个终端页面
- ctrl+a k:退出当前screen会话
- ctrl+a [:进入滚动/复制模式,可以查看这个screen会话的历史输出,因为如果不用这个命令的话,在screen窗口之外的就看不到了,也没法上翻。
欢迎关注:钟觉浅Tech。