如何从Pycharm分离运行python脚本以便它继续附加到文件?

问题描述 投票:6回答:1

我正在使用远程系统,我使用Pycharm远程窗口来编辑和运行我的脚本。

我登录使用

ssh -Y myName@myMachine

然后我从终端运行Pycharm。

我想以这样的方式从Pycharm运行我的脚本,如果我关闭它(甚至可能从ssh会话注销),进程仍然会运行。

我试图使用选项“分离而不终止进程”退出Pycharm。这导致python进程显示在以下列表中:

ps -all

但是,它会停止写入文件。当pycharm打开时,进程通常每隔几秒就写入一个文件。当从pycharm分离时,它会在进程列表中显示(在注销和再次登录之后它会在ps -x中显示未知的tty),但是它会停止工作,因为它不再将任何输出附加到它通常应该的文件。

可能导致什么呢?我怎样才能解决这个问题?

python ssh process pycharm nohup
1个回答
0
投票

有几种方法:

  1. 使用终端模拟器作为tmuxscreentmux - tmux是一个终端多路复用器,可以从一个屏幕创建,访问和控制多个终端。 tmux会话可以从屏幕上分离并继续在后台运行,然后重新连接。与屏幕工具类似,您也可以使用tmux从SSH会话中分离而不退出远程作业。 安装tmux后,使用以下命令启动tmux会话: $ tmux 现在,开始你的任务或工作。然后通过按“CTRL-b”,然后按“d”,安全地从tmux会话中分离而不退出远程作业。这将分离你的tmux会话,但会让你在后台运行该会话。这意味着即使您与会话断开连接,所有遥控器也将运行。 要列出可用会话,请运行: $ tmux ls 您可以使用相应的会话ID重新连接到tmux会话,如下所示: $ tmux attach -t <会话ID> 有关更多详细信息,请参阅手册页。 $ man tmux screen - 屏幕工具,带有VT100 / ANSI终端仿真的全屏窗口管理器,允许您在不退出远程作业的情况下安全地从SSH会话中分离。对于使用多个远程服务器的人来说,它会很有帮助。 在远程系统上安装屏幕后,启动屏幕会话: $ screen 屏幕会话现已开始。现在运行您想要在远程系统上执行的任何工作或任务,然后按“Ctrl-A”,然后按“d”退出屏幕会话,从屏幕会话中分离后,您可以从远程系统注销系统。远程作业将继续在服务器中运行。 要列出屏幕会话,请运行: $ screen -ls 您可以使用相应的会话ID重新连接到屏幕会话,如下所示: $ screen -r <会话ID> 有关更多详细信息,请参阅手册页。 $ man screen
  2. 使用在后台执行的分离命令([read also] [6]): nohup - 代表No hangup,是另一个命令行实用程序,即使在您断开SSH会话后也可以帮助您运行Linux命令。 用法非常简单。登录远程系统后,您所要做的就是: $ nohup <command>& 现在,您可以退出SSH会话。远程作业将继续运行。 要列出正在运行的作业,请运行: $ jobs -l 有关更多详细信息,请参阅手册页。 $ man nohup disown - Disown,从系统的进程作业列表中删除作业,因此在会话断开连接时屏蔽进程不被杀死,因为当您注销时shell不会收到SIGHUP。 登录到远程系统后,使用“&”运行命令: $ <command>& 然后列出正在运行的作业,使用: $ jobs -l 然后使用进程ID运行disown,如下所示: $ disown -h <PID> 您现在可以断开与服务器的连接 有关更多详细信息,请参阅手册页。 $ man nohup setsid - setsid为正在执行的进程分配一个新的进程组,因此,创建的进程完全在新分配的进程组中,并且可以安全地执行,而不用担心即使在会话注销后也被杀死。 登录远程系统后,运行: $ setsid <command> 有关更多详细信息,请参阅手册页。 $ man nohup
© www.soinside.com 2019 - 2024. All rights reserved.