1. 终端管理工具
1.1 screen
1.1.1 介绍
Screen 或GNU Screen 是终端多路复用器。 换句话说,这意味着您可以启动屏幕会话,然后在该会话中打开任意数量的窗口(虚拟终端)。 当您的屏幕窗口不可见时,即使您已断开(SSH)连接,在screen中运行的进程也将继续运行。
1.1.2 应用场景
假如有三种业务都需要在同一台服务器上运行,为了方便管理,可以创建三个screen窗口并命名,一个screen窗口运行一种业务, 可以配合pm2或者nohup一起使用; 当你需要启动业务1的程序或者检查业务1的代码运行情况时,只需进入业务1对应的screen窗口即可,避免混淆.
1.1.3 常用指令
1.创建一个screen会话窗口,并自动进入刚创建的窗口: screen -S 名称
回车后,就会自动进入新建的窗口
2.从Screen会话中脱离, 回到主窗口: Ctrl + a + d
3.查看当前正在运行的screen会话:
screen -ls
- 主窗口执行:
- 子窗口("通过screen -S 名称"创建的窗口)执行:
4.在主窗口通过id或者name进入指定的screen会话: screen -r [id]或者[name]
回车后:
5.删除screen会话:
- 方法1:子窗口—>进入某个screen会话窗口,输入
exit
回车 - 方法2:主窗口—>在主窗口,执行
screen -S [id]或者[name] -X quit
关闭指定screen会话
2. 进程管理工具
2.1 nohup
2.1.1 介绍
- nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
- 系统自带命名,无需额外安装.
2.2.2 常用指令
1.用来测试的demo.py
import time
import datetime
while 1:
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"{now}:{'1'*10}")
time.sleep(3)
2.执行脚本
nohup python3 -u demo.py > run.log 2>&1 &
后台执行demo.py 脚本,并重定向输入日志到run.log 文件
- -u: 使python不启用缓冲. 如果不加-u, run.log中显示不出python代码中print的内容,这是因为python的输出有缓冲,导致run.log并不能够马上看到输出
- 2>&1: 将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 run.log 文件中
- &: 让命令在后台执行,终端退出后命令仍旧执行。
3.查看日志
tail -f run.log
- -f: 循环读取, 不断刷新日志
4.停止脚本
如果要停止运行,使用以下命令查找到 nohup 运行脚本到 PID,然后使用 kill 命令来删除:
ps -aux | grep "demo.py"
kill -9 进程号PID
2.2 pm2
2.2.1 介绍
- 常用来管理node进程, 也可以用来管理python等脚本程序.
- 需要额外安装.
2.2.2 安装
# 先下载安装包,并上传到服务器[https://nodejs.org/en/download/], 然后解压
tar xvf node-v12.18.3-linux-x64.tar.xz -C /usr,可以解压到 /usr下 (并且将其改名为node, 改名只是为了简洁)
# 解压文件的 bin 目录底下包含了 node、npm 等命令,可以使用 ln 命令来设置软连接:
ln -s /usr/node/bin/node /usr/local/bin/
ln -s /usr/node/bin/npm /usr/local/bin/
# 这样node就安装好了,接下来我们安装pm2
全局安装 :npm install pm2 -g
安装好后在你的安装的node/bin目录下会出现一个pm2文件,同样设置软链接:
ln -sf /usr/node/bin/pm2 /usr/local/bin/
# 输入 `pm2 list`, 能看到进程页面,就是安装成功了
2.2.3 常用指令
1.启动python文件, --interpreter指定解释器: pm2 start demo.py -x --interpreter python3
2.查看已经启动的pm2进程: pm2 list
3.同一个python文件启动3个实例: pm2 start demo.py -x --interpreter python3 -i 3
4.查看所有在运行程序的日志: pm2 logs
5.查看某个id的日志: pm2 logs <id>
6.删除某个id进程: pm2 delete <id>
7.删除所有进程: pm2 delete all
或pm2 kill
8.清除pm2产生的日志:pm2 flush
9.也可以通过脚本定时删除pm2产生的日志:以下脚本是一天清除一次,可以自行修改sleep后面的参数.
#!/bin/bash
while true
do
now=`date +"%Y-%m-%d %H:%M:%S"`
echo $now
echo "正在清除pm2日志..."
pm2 flush
echo "--------"
# 1s:一秒, 1m:一分钟, 1h:一小时, 1d:一天
sleep 1d
done