首页 > 解决方案 > Google Cloud VM 中的后台进程在一段时间后终止

问题描述

我正在使用命令在 google cloud VM(使用 Ubuntu 20.04 的 e2 介质)中运行我的应用程序

nohup node server.js > out.log &

我关闭了 ssh 连接,它运行了一段时间,然后应用程序终止。我检查了日志,没有错误。在此期间,我什至没有向服务器请求任何内容。我还检查了谷歌云控制台中的实例指标,CPU 利用率始终低于 10%。我在我的电脑上测试过,这个问题没有发生。

在此处输入图像描述

为什么我的应用程序在云中终止?

标签: ubuntugoogle-cloud-platformbackground-processnohup

解决方案


正如@John Hanley Nohup 所提到的,这不是在后台运行进程的可靠方法。尽管这是在后台运行进程的常用方法,但它不能让您很好地控制进程。您无法轻松停止或重新启动该过程。nohup 的问题在于,如果您不将输出发送到 > /dev/null 2>&1,那么它将保持输出进程打开。所以如果你关闭终端,你也会关闭输出进程。

您可以使用systemd 服务来运行后台进程,而不是使用 nohop 。与 nohop 相比,Systemd 是一项更强大的服务。大多数 Linux 系统都有 systemd 允许您定义和管理服务。您可以使用 systemctl 命令轻松启动、停止或重新启动脚本。有关信息,请参阅如何在后台运行 NodeJS 应用程序中的方法 #3 。

您还可以使用屏幕命令保持 SSH 会话运行,如果它是交互式的,则允许您重新连接到该进程。Screen 是一个用于 Linux 的文本窗口管理器,它允许用户同时管理多个终端会话、在会话之间切换、为屏幕上正在运行的会话记录会话,甚至可以在我们需要的任何时间恢复会话,而不必担心会话被记录出或终端被关闭。如果您希望许多进程在后台运行,这可能会更麻烦,但如果这只是一个,那就很容易了。

安装屏幕: sudo apt install screen,使用 screen 运行它并将其视为另一个屏幕,运行您想要的任何内容,然后只需按ctrl + ad即可返回“原始”外壳。如果要恢复屏幕会话,请键入 screen -r。有关信息,请参阅如何使用 Linux 屏幕

有关信息,请参阅如何在后台运行 Node JS 服务器如何在结束 ssh 会话后保持进程运行


推荐阅读