50% 折扣 所有计划,时间有限。开始于 $2.48/mo
还剩 8 分钟
服务器和操作系统

nohup 命令在 Linux 中的工作原理 – 语法、用例和示例

艾达·洛夫古德 By 艾达·洛夫古德 8 分钟阅读 更新于 2024 年 7 月 14 日
nohup 命令

如果您是一名 Linux 开发人员,您就会知道会话一致性和可靠性的重要性。即使在您注销会话后,Linux 中长时间运行的进程也需要继续。幸运的是,Linux 有一个用于此目的的功能命令。这 nohup 命令 允许您保持命令在后台不间断运行。这样可以防止数据丢失并节省宝贵的时间。本指南将引导您了解有关 Linux nohup 命令所需了解的所有内容,从语法和选项到实际示例以及常见错误故障排除。

了解 Linux nohup 语法

nohup 命令易于使用且简单明了。它允许您在后台运行命令或脚本,因此您可以确保即使在您注销终端后它们也会继续执行。使用方法如下:

nohup [command] [arguments] &

你应该更换 [命令] 与您要运行的命令或脚本。和 [争论] 是命令所需的任何参数或选项。这 & 符号发送命令在后台运行。让我们看一个例子:

nohup myscript.sh &

在这个例子中, myscript.sh 是一个 bash 脚本,即使关闭终端也会继续运行。输出将被重定向到名为 nohup.out 默认情况下,除非您指定其他路径。

探索 nohup 选项

虽然 nohup 命令本身没有太多选项,但了解如何有效地使用它与各种命令和重定向技术可以提高其性能。首先,让我们看看如何获​​取有关 nohup 命令的信息:

nohup –-help 
nohup --version

这两个命令通过显示帮助消息和 nohup 版本为您提供一些有用的信息。

使用 nohup 命令运行进程

如果您想使用 nohup 命令运行进程,您可以遵循我在上一节中解释的相同结构:

nohup [command]

如果你想在后台运行一个进程,只需添加 & 到你的命令结束。

使用 nohup 命令在后台运行多个进程

现在,如果您想使用 nohup 命令在后台运行多个进程怎么办?

nohup bash -c '[command A] && [command B]' &

代替 [命令A][命令B] 与您想要在后台运行的命令。想象一下,您想要首先更新系统软件包,然后清理不必要的文件,并且您想要使用 nohup 命令来执行此操作:

nohup bash -c 'sudo apt-get update && sudo apt-get autoremove -y' &

在这个例子中, 诺哈普 允许更新和清理进程继续在后台运行。这样您的系统维护任务就可以完成,而无需您保持终端打开。

重定向自定义输出

该过程的输出将被重定向到 nohup.out 默认情况下。但是如果您想在另一个路径中接收输出怎么办?具体方法如下:

nohup [command] > [/path/to/new/output.txt]

请记住替换中的值 [] 与您想要的命令和文件路径。

将 nohup 与其他命令结合使用

nohup 可以与其他命令和管道结合使用来创建强大的命令链。让我们看一个例子:

nohup find / -name "*.log" | xargs grep "ERROR" > error_logs.txt 2>&1 &

在这里, 寻找 命令用于搜索日志文件和 grep 用于搜索术语“ERROR”。组合输出被重定向到 错误日志.txt.

在本节中,我们介绍了 nohup 命令的最常见选项和用例。通过掌握这些指令,您可以有效地使用 nohup 在后台运行 Linux 进程。

常见错误和故障排除

使用 nohup 命令通常很简单,但在此过程中您可能会遇到一些常见错误。了解这些错误并了解如何解决它们可以节省您的时间并减少挫败感。那么,让我们看看这些常见错误是什么以及如何解决它们:

没有权限

当您尝试运行的脚本或命令没有执行权限时,会出现此错误。错误的输出如下所示: nohup:无法运行命令“myscript.sh”:权限被拒绝

要解决此问题,您需要确保脚本或命令具有正确的权限。您可以使用以下命令添加执行权限 chmod 命令:

chmod +x myscript.sh 
nohup ./myscript.sh &

未找到命令

如果在指定位置找不到该命令或脚本或者在您的 PATH 中不可用,则会出现此错误。错误的输出如下所示: nohup:无法运行命令“myscript.sh”:没有这样的文件或目录

要解决此错误,您应该验证命令或脚本是否存在并且位于正确的目录中。您可能需要提供脚本的绝对路径:

nohup /path/to/myscript.sh &

另请确保该命令已安装并且在您的 PATH 中可用。

无输出

有时,您可能会注意到终端或输出文件中没有输出。如果命令生成输出,但您看不到它,则它可能被重定向到默认文件以外的路径,或者文件权限可能存在问题。要解决此问题,您需要显式指定输出文件以确保其正确重定向:

nohup myscript.sh > output.log 2>&1 &

例如,此命令将标准输出和标准错误重定向到名为的文件 output.log.

脚本不在后台运行

有时,您的脚本或命令似乎正在运行,但不在后台运行。原因通常很简单。您可能忘记添加 & 命令末尾的符号可在后台运行它。解决方案也很简单,只需确保您已添加该内容即可开始。

进程挂起或无响应

使用 nohup 启动的进程可能会挂起或变得无响应。如果进程正在等待输入或者它尝试访问的资源存在问题,则可能会发生这种情况。这个问题有两种解决方案:

  • 检查所需的输入: 确保该命令不需要任何交互式输入。
  • 资源问题: 验证该命令是否有权访问必要的资源(例如文件、网络)。

覆盖 nohup.out

如果您使用 nohup 命令在后台运行多个进程,您可能会无意中覆盖 nohup.out 文件。为了避免这个问题,您可以为每个进程选择特定的路径。这样每个进程都有其唯一的输出文件,并且默认路径不会被覆盖。

通过了解常见的nohup错误及其解决方法,您可以毫无问题地使用nohup命令。

结论

对于任何需要在后台运行进程的 Linux 用户来说,nohup 命令是一个很棒的工具,因为它可以确保您的进程即使在注销后也能继续运行。在本指南中,我们介绍了基本语法,探索了各种选项,并讨论了常见错误以及故障排除技巧。掌握 nohup 命令可以让您有效地管理长时间运行的任务,从而提高您的工作效率和系统管理技能。

如果您是一名 Linux 开发人员,希望最大限度地提高 Linux 体验,请考虑升级到可靠的 Linux虚拟专用服务器。我们基于云的 VPS 服务提供 24/7 支持和 99.95% 的正常运行时间保证,这意味着您的应用程序始终平稳运行,并且您可以在一天中的任何时间获得帮助。凭借强大的基础设施和可靠的资源,我们的 VPS 旨在满足 Linux 程序员的需求。另外,您可以预安装您喜欢的 Linux 发行版,从而使安装变得快速而简单。借助可提供您所需的功能和灵活性的 VPS,将您的 Linux 项目提升到一个新的水平。

常问问题

有什么区别 诺哈普&?

诺哈普 防止进程在用户注销时终止,同时 & 在后台运行一个进程。使用 诺哈普 确保注销后进程继续,并将其与 & 允许它在后台运行。

为什么使用nohup?

诺哈普 用于确保即使在用户注销或终端关闭后命令或脚本仍继续运行。对于需要在没有用户干预的情况下保持活动状态的长时间运行的流程来说,这是至关重要的。

nohup out 文件是什么?

nohup.out file 是默认输出文件,其中 nohup 重定向命令的标准输出和标准错误。如果未指定其他输出文件,则命令的输出保存在 nohup.out 在当前目录中。

分享

更多来自博客

继续阅读。

可以使用 Cosmos Cloud 运行的最佳自托管应用程序封面图像,其中包含 Cosmos 仪表板周围的应用程序面板。
服务器和操作系统

可以使用 Cosmos Cloud 运行的最佳自托管应用程序:文件、媒体、密码、自动化等等!

也许您已经设置了 Cosmos Cloud,现在想看看哪些应用程序与其匹配,或者您甚至还没有决定使用 Cosmos,只是想看看它有多适合您的工作

尼克·西尔弗尼克·西尔弗 阅读时间 16 分钟
Portainer 与 Cosmos Cloud 用于管理 Docker 应用程序的比较,包括混合设置图和 neon ops 与访问块。
服务器和操作系统

Portainer 与 Cosmos Cloud:最适合 Docker 应用程序管理

如果您已经了解 Docker 并且只是想要以更简洁的方式运行不断增长的应用程序堆栈,那么这里是 Portainer 与 Cosmos Cloud 的简短回答。 Portainer 是直接的更强选择

尼克·西尔弗尼克·西尔弗 阅读时间 14 分钟
Cosmos Cloud、CasaOS 与 Umbrel 专题图显示了一个抽象云网络世界中的三个自托管路径。
服务器和操作系统

Cosmos Cloud、CasaOS 与 Umbrel:哪个自托管平台适合您的设置?

简而言之,CasaOS 仍然是最容易开始的地方,Umbrel 具有最干净的策划感觉,一旦您想要更严格地控​​制 doma,Cosmos Cloud 就更有意义

尼克·西尔弗尼克·西尔弗 阅读时间 11 分钟

准备好部署了吗? 每月 2.48 美元起。

独立云,自 2008 年起。AMD EPYC、NVMe、40 Gbps。 14 天退款。