如何无需每次SSH执行tmux attach查看Google Cloud VM的stdout输出
无需手动执行tmux attach查看Python脚本输出的实现方案
以下方案从易到难排列,可根据自身使用场景选择:
方案1:零依赖后台运行+日志重定向(最适合入门用户)
不需要额外安装任何工具,启动脚本时直接用nohup把进程挂后台,同时把输出重定向到日志文件即可,命令如下:nohup python3 你的脚本文件名.py > run_log.log 2>&1 &
命令参数说明:nohup:让进程忽略SSH断开时的挂起信号,不会因为退出SSH就被系统杀死> run_log.log:把标准输出stdout写入同目录下的run_log.log文件2>&1:把标准错误stderr也合并写入同一个日志文件,避免报错信息丢失- 末尾的
&:让进程在后台运行,执行完命令就可以正常执行其他操作,退出SSH也不影响脚本运行
下次SSH登录上来要看实时输出,直接执行tail -f run_log.log即可,会实时刷新日志内容,按Ctrl+C就会退出日志查看,脚本运行不会受任何影响。
方案2:配置SSH登录自动attach tmux会话
如果本身习惯用tmux,不想每次登录手动敲attach命令,直接把下面的配置追加到用户目录下的.bashrc文件末尾:if [[ -n "$SSH_CONNECTION" && -z "$TMUX" ]]; then tmux attach -t run_session || tmux new -s run_session fi存完之后执行
source ~/.bashrc生效。配置逻辑:检测到当前是通过SSH连接、且不在tmux会话内时,会自动尝试连接名叫run_session的tmux会话,会话不存在就自动新建一个。平时跑脚本就在这个会话里跑,下次SSH连上来会直接进到会话界面,直接就能看到脚本输出,完全不用手动敲attach命令。方案3:配置systemd系统服务(适合长期稳定运行的脚本)
如果脚本需要长期在VM上跑、要求开机自启、崩溃自动重启,配systemd服务是稳定性最高的选择:- 新建服务配置文件
/etc/systemd/system/my_py_script.service,写入以下内容,替换成自己的路径和用户名:
[Unit] Description=Running Python task After=network.target [Service] User=你登录VM用的用户名 WorkingDirectory=你的Python脚本所在的绝对路径 ExecStart=/usr/bin/python3 你的脚本文件名.py Restart=on-failure StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target- 依次执行以下命令加载配置、启动服务、设置开机自启:
systemctl daemon-reloadsystemctl start my_py_scriptsystemctl enable my_py_script
之后不管什么时候SSH登上来,直接执行journalctl -u my_py_script -f就能实时看脚本的stdout和stderr输出,脚本崩溃、VM重启都会自动拉起来,不需要手动维护。
- 新建服务配置文件
小提示:用日志重定向或者systemd方案的时候,注意定期清理历史日志,避免日志文件占满系统盘。
内容的提问来源于stack exchange,提问作者Niko Tsakiris
相关产品推荐
相关产品推荐

