后台运行python脚本

-
-
2024-11-23

昨晚ssh连接4070s上跑代码,执行了训练脚本之后就去睡觉了。我忘了休眠之后网络会断开,终端停止连接,所以训练没跑完,以后要记得后台执行脚本,我之前用的命令一直是nohup python script.py > output.log 2>&1 &,下面详细整理下参数并多记录一种方法。

方法1:nohup

  • 运行命令:nohup python -u script.py > output.log 2>&1 &
    • nohup:no hangup,可以让程序后台运行,即使关闭终端,程序也不会停止。
    • -u:表示不带缓冲,加上这个可以第一时间看到log里的结果,log内容输出是一条条的,不加的话log内容输出是一坨坨的。
    • > output.log:将输出保存到output.log文件中,很好理解。>是直接覆盖到文件,>>是追加到文件。
    • 2>&1:将标准错误输出也重定向到output.log,在linux中0是标准输入,1是标准输出,2是错误标准输出。
    • &:表示后台执行
    • 停止脚本:先查找脚本 ps aux | grep script.py,然后kill <PID>即可。
    • 总结:后台执行script脚本,将所有输出信息写入log文件,并且关闭终端后程序仍继续运行。

方法2:screen/tmux

  • screen是一个终端管理工具,可以让程序在独立的会话中运行,断开ssh后仍保持连接,tmux与其类似。
    • 安装:sudo apt install screen
    • 创建新会话:screen -S new_session
    • 运行脚本:在新会话中运行脚本 python script.py
    • 安全退出对话:Ctrl+a,然后按d(detach),会话会分离,程序仍会运行。
    • 重新连接:查看当前会话screen -ls;重新连接screen -r new_session
    • 删除对话:
      • 在会话中,直接Ctrl+d,相当于delete
      • 在会话中,exit
      • screen -ls,然后kill -9 pid
    • 关闭会话:screen -X -S new_session quit (强制删除,一般不用)
       
image.png

2024年12月25日

更:

最近用screen比较多,感觉比nohup好用,一般就用到两个命令:

# 连接screen,连接后台的screen,如果没有就创建一个
screen -xRR

# 退出,其实不算是命令
ctrl+a→d

2025年5月8日 02点43分

更:

在 screen 中,Ctrl + A 是 命令前缀(也叫 控制键),它用来启动 screen 的命令模式。当按下 Ctrl + A 后,可以按其他键来执行 screen 的特定命令。 具体的操作:

  • Ctrl + A:这告诉 screen,接下来的按键是命令而不是输入。按下 Ctrl + A 后,screen 会等待其他键按下来执行相应的命令。

常用的 Ctrl + A 后续命令:

  • Ctrl + A + D:分离会话(detach)。这会将当前的 screen 会话放到后台运行,你可以继续使用终端,而会话仍在后台运行。如果你之后想重新连接会话,可以使用 screen -r 命令。
  •  Ctrl + A + C:创建新的窗口。在 screen 中,你可以有多个会话窗口,按 Ctrl + A 后按 C 会创建一个新的窗口。 
  • Ctrl + A + N:切换到下一个窗口。如果你有多个窗口,按下 Ctrl + A 后按 N 可以切换到下一个窗口。 
  • Ctrl + A + P:切换到上一个窗口。按 Ctrl + A 后按 P 可以返回到上一个窗口。 Ctrl + A + ":列出所有窗口。按 Ctrl + A 后按 " 可以显示当前所有窗口的列表,允许你选择并切换到任何一个窗口。 
  • Ctrl + A + K:关闭当前窗口。按 Ctrl + A 后按 K 会关闭当前的 screen 窗口。 
  • Ctrl + A + S:水平拆分窗口。会将当前窗口分成上下两部分,你可以在每个区域中运行不同的命令。
  •  Ctrl + A + |:垂直拆分窗口。这会将当前窗口分成左右两部分。 
  • Ctrl + A + Q:关闭所有拆分的窗口。如果你之前使用了 Ctrl + A + S 或 Ctrl + A + |,你可以用这个命令关闭所有拆分的窗口,恢复原始视图。 
  • Ctrl + A + X:锁定屏幕。锁定当前会话,需要输入密码才能解锁。

目录