1.问题描述
问题1:在Linux服务器中运行项目,一般情况下会使用
SSH
远程服务连接云端服务器。但是,程序运行时间可能过长,大家可能总是会因为各种意外无法监督程序运行
,为了保证大家在无法监督程序运行的情况下也能查看程序运行的日志写下这篇博客。简而言之,如何在Linux服务器下保存运行日志
问题2:在Linux服务器中运行项目,可能会因为SSH服务的不稳定,导致链接断联,或者你突然需要携带你的笔记本前往某个没有网络的位置。这时,若你的程序是前台运行的,一旦会话断联,你的程序也自然终止了。简而言之,如何在Linux服务器下让程序后台运行或者如何让程序在本机网络断联的情况下也能持续运行
2.令程序后台运行
2.1 方法一:nohup命令
- 瞎眼运行
nohup python your_script.py &
注意,此时你的程序转为后台运行了,但是运行过程中的所以打印信息你都看不到,属于
蒙着眼在跑程序
,是否报错都看不到。
- 记录运行日志
nohup python your_script.py > run.log &
注意,此时你的程序虽转为后台运行了,但是运行过程中产生的所有信息都记录在文件run.log中。为方便你观察运行情况,可以使用tail命令观察。
tail run.log
,该命令默认查看文件的最后10
条记录。若要观察全部文件,可使用vim run.log
打开整个文件。
2.2 方法二:tmux命令
- 新建会话
tmux new -s your_session_name
- 在新建的会话中运行程序
python your_script.py
- 离开会话
按键Ctrl+B+D
注意:先按Ctrl+B,松开后按下D
这样,你在SSH服务终端创建了一个新的会话。即使你携带着你的笔记本电脑到了没网的地方,该会话仍在后台运行。当你到了有网的地方,想要重新链接进会话,可以用如下命令。
- 重新连接会话
tmux attach -t your_session_name
当然,tmux还有很多其他的命令,tmux的其他命令使用方法见附录A
3.令程序前台运行、记录运行日志同时打印在前台
python your_script.py 2>&1 | tee run.log
这个命令可以在程序运行时保存运行日志,同时日志也能打印在前台终端上。但是,注意该命令当你的终端会话断联时无法继续运行了。这个命令可以让你在有事情无法继续观察运行状况时,将运行情况记录在日志记录中,同时也打印在终端上。注意,2>&1的意思是将所有打印的信息全部保存在日志文件中。
4.令程序持续运行、记录运行日志同时打印在终端上
结合上述的方式,可以先使用tmux创建新的会话,而后在会话中使用标题3的命令,即可在本机断网的情况下程序能够持续运行,如下所示:
- 新建会话
tmux new -s your_session_name
- 在新建的会话中运行程序
python your_script.py 2>&1 | tee run.log
- 离开会话
按键Ctrl+B+D
注意:先按Ctrl+B,松开后按下D
附录A
tmux
常用命令
- 新建会话
tmux new -s your_session_name
- 查看所有会话
tmux ls
- 关闭会话
tmux kill-session -t your_session_name
注意:执行该命令后就无法再使用重新连接会话的命令重连会话了
- 退出会话
exit
注意:执行该命令后就无法再使用重新连接会话的命令重连会话了
- 离开会话
按键Ctrl+B+D
注意:先按Ctrl+B,松开后按下D
- 重新连接会话
tmux attach -t your_session_name
感谢
感谢以下文章给予的帮助: