【问题标题】:Running a command as a background process/service将命令作为后台进程/服务运行
【发布时间】:2011-11-17 09:16:24
【问题描述】:

我有一个想在后台运行的 Shell 命令,我已经读到这可以通过在命令后缀 & 来完成,这会导致它作为后台进程运行,但我需要一些更多功能,想知道如何去做:

  1. 我希望该命令在每次系统重新启动时在后台启动和运行。
  2. 我希望能够在需要时启动和停止它,就像 service apache2 start 一样。

我该怎么办?是否有工具可以让我将命令作为服务运行?

我对此有点迷茫。

谢谢

【问题讨论】:

  • 仅供参考,Unix“服务”通常称为daemon - 知道这可以帮助您更轻松地查找信息。

标签: bash shell unix service background-process


【解决方案1】:

UNIX 系统可以同时处理任意数量的进程(如果您在 GUI 中,只需打开新的 shell 窗口),因此只有在需要继续使用当前 shell 窗口时才需要在后台运行进程一旦你运行了一个持续运行的应用程序或进程,就可以做其他事情了。

要在后台模式下运行名为 command 的命令,您可以使用:

command &

这是一个特殊字符,可在进程启动后返回命令提示符。还有其他特殊字符可以做其他事情,更多信息请参见here

【讨论】:

  • 使用Sorgigal方案的好处是可以关闭终端/shell进程,进程会继续运行。使用 & 的情况并非如此,因为该进程仍然附加到特定的 shell 进程,如果 shell 进程这样做,则退出。
  • 要在关闭 shell 后保持 command 运行,请使用 nohup command &
【解决方案2】:

看看daemon 命令,它可以将任意进程变成守护进程。这将允许您的脚本充当守护程序,而无需您做很多额外的工作。下一步是在启动时自动调用它。要知道执行此操作的正确方法,您需要提供您的操作系统(或者,对于 Linux,您的发行版)。

【讨论】:

  • 干杯 Sorpigal。这有帮助。
  • 嗨,Sorpigal。我知道我已经接受了这个答案,但你能告诉我如何让守护程序在启动时启动。我在 Ubuntu 10.4 上。谢谢。
  • @MridangAgarwalla:我对 Ubuntu 的新 init 系统不是很熟悉,但 try here 并在“写作服务”部分将您的守护进程调用放在上面写着 echo "Put bash code here" 的位置
【解决方案3】:

根据这篇文章:
http://felixmilea.com/2014/12/running-bash-commands-background-properly/

...另一个好方法是screen 例如:

screen -d -m -s "my session name" <command to run>

来自screen manual

-d -m
以分离模式启动屏幕。这会创建一个新会话,但不会附加到它。这对于系统启动脚本很有用。

即你可以关闭你的终端,进程会继续运行(不像&amp;

使用screen,您还可以稍后重新附加到会话

【讨论】:

  • felixmilea.com 域不再存在,链接随机重定向到钓鱼页面。
【解决方案4】:

在将输出定向到 /dev/null 时使用 nohup

nohup command &amp;&gt;/dev/null &amp;

【讨论】:

    【解决方案5】:

    要使用 bash 进行高级作业控制,您应该查看命令 jobs bgfg

    但是,您似乎对在后台运行命令并不真正感兴趣。您要做的是在启动时启动命令。执行此操作的方法因您使用的 Unix 系统而异,但请尝试查看 rc 系列文件(例如在 Ubuntu 上的 /etc/rc.local)。它们包含将在 init 脚本之后执行的脚本。

    【讨论】:

    • 我知道这不是 OP 的解决方案,但如果有人对这个答案摇摆不定,知道你可以“拒绝”工作并且他们将继续在后台运行是有帮助的外壳退出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 2013-11-11
    • 2012-11-17
    • 2019-09-24
    • 2016-05-04
    • 1970-01-01
    相关资源
    最近更新 更多