在使用远程SSH连接工具时,退出工具时任务也停止,相当于远程连接工具在系统开启了一个Terminal
终端,服务也会随着终端的中断而停止。Linux系统也提供了服务基于后台运行的命令,是独立于终端的进程。
nohup
nohup的英文全称是nohangup(不挂起),用于在系统后台运行命令而不挂起。退出终端不会影响程序的运行。
nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到$HOME/nohup.out
文件中。
语法格式:nohup Command [ Arg … ] [ & ]
参数说明:
-
命令:要执行的命令。
-
arg:一些可以指定输出文件的参数。
-
&:让命令在后台执行。终端退出后该命令仍然会被执行。
案件:
如图所示,有一个简单的flask web文件
使用python3 test.py
运行项目
直接在公网访问
断开xshell工具后就无法访问了
nohup启动
通过nohup
命令后台启动
nohup python3 test.py &
不加
&
会关闭标准输入。
当出现此打印时,说明启动成功。
ignoring input and appending output to 'nohup.out'
还可以在当前目录下看到一个nohup.out文件
ps命令查找进程
ps 命令查找 nohup 运行脚本的 PID 或脚本名称。
ps -aux | grep "test.py"
参数说明:
- a:显示所有程序
- u:以面向用户的格式显示
- x:显示所有程序,无论终端如何
另外也可以使用 ps -def | grep "test.py"
命令来查找。
kill停止进程
找到PID后,可以使用kill PID将其删除。
kill -9 进程号PID
Nohup的功能相对较少,只能帮助进程在后台运行。实际中,一个Linux会部署多个服务,有时需要观察不同服务的打印终端,所以nohup并不能满足需求。
jobs查看后台进程
jobs 命令可用于查看当前终端放入后台的作业。
jobs [选项]
选项 | 意义 |
---|---|
-l(小写 L) | 列出进程的PID号。 |
-n | 仅列出自上次发出通知以来状态已更改的进程。 |
-p | 仅列出进程的 PID 号。 |
-r | 仅列出正在运行的进程。 |
-s | 仅列出已停止的进程。 |
fg 命令恢复后台命令
除了将工作丢到后台去运行,也可以将后台工作拿到前台来执行。fg
命令用于把后台工作恢复到前台执行,该命令的基本格式如下:
fg %工作号
工作号时通过jobs
命令查看的,如下:
[1]
中的1
就是工作号。
如果要想中止某个命令,要么把命令恢复到前台,然后正常Ctrl+C退出;要么找到 top 命令的 PID,使用 kill 命令杀死这个进程。
Screen
Screen 是一个全屏窗口管理器,它在多个进程之间复用一个物理终端。 screen 命令允许用户在单个窗口中使用多个终端会话。断开的会话可以断开,断开的会话可以重新连接。每个会话都可以恢复。
基于screen的特性可以使用screen来实现服务的持久化。具体实现请看之前的文章Linux屏幕工具库实现多终端。