ubuntu - Google Cloud VM 中的后台进程在一段时间后终止
问题描述
我正在使用命令在 google cloud VM(使用 Ubuntu 20.04 的 e2 介质)中运行我的应用程序
nohup node server.js > out.log &
我关闭了 ssh 连接,它运行了一段时间,然后应用程序终止。我检查了日志,没有错误。在此期间,我什至没有向服务器请求任何内容。我还检查了谷歌云控制台中的实例指标,CPU 利用率始终低于 10%。我在我的电脑上测试过,这个问题没有发生。
为什么我的应用程序在云中终止?
解决方案
正如@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 会话后保持进程运行。
推荐阅读
- ssh - 在 gcp 实例上使用 Ansible 连接到另一个实例错误
- flutter - Flutter:连续调整两个文本子项的大小
- python - 如何将列表打印到单独的列表中python
- django - 如何处理 django 视图中的错误?
- java - CXF - 方法参数为空
- python - 孟加拉语单词在 manim 中全错
- android - Google 代理访问 Messages by Google 中的网址
- firebase - Flutter:Firebase从用户ID读取数据
- html - 如何让我们的网站在 1 秒内加载?
- sql - 连接后,表中的两行在另一个表中显示为两个不同的列