我正在尝试运行一个script.py
在我通过 ssh 连接的远程 CentOS 7.3 机器上调用的脚本。我正在从名为 的环境运行该脚本py
。我希望脚本在断开连接后继续运行。通过阅读我尝试过的其他堆栈交换问题
conda activate py
nohup python script.py &
这是可行的,但是当我断开 ssh 时,进程停止运行。
我也尝试过
screen
conda activate py
python script.py
然而,这给了我一个NameError
与我的环境中py
但不在base
.所以看起来当我使用screen
它时不使用py
环境。
最后我没有tmux
安装,也不能这样做,因为它是一个工作箱。
还有其他想法吗?
答案1
尝试setsid
。我将它用于运行 WSGI 的 python 脚本。每技术人员:
实现所需行为的另一个实用程序是setsid。 Nohup 有一个缺点,即进程的进程组保持不变,因此使用 nohup 运行的进程很容易受到发送到整个进程组的任何信号(例如 Ctrl + C)的影响。
另一方面,setsid 为正在执行的进程分配一个新的进程组,因此,创建的进程完全位于新分配的进程组中,并且可以安全地执行,即使在会话注销后也不用担心被杀死。
答案2
这通常对我有用,
python script.py &
在你的情况下尝试不使用诺哈普,这应该有效。