2011-11-17 81 views
11

我有一个我想在后台运行的Shell命令,并且我已经读过,可以通过将&加到命令中来使其运行为一个后台进程,但我需要一些更多的功能,并想知道如何去做:运行一个命令作为后台进程/服务

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

我该怎么办?有没有一种工具可以让我作为一项服务运行命令?

我有点迷路了。

感谢

+0

FYI,一个Unix “服务” 通常被称为[守护进程(http://en.wikipedia.org/wiki/Daemo n_%28computing%29) - 知道这可以帮助你更容易地找到信息。 – Sorpigal

回答

20

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

+0

干杯Sorpigal。这有帮助。 –

+0

嗨Sorpigal。我知道我已经接受了这个答案,但是你能否告诉我如何让守护进程在启动时启动。我在Ubuntu 10.4上。谢谢。 –

+1

@MridangAgarwalla:我对Ubuntu的新init系统并不是很熟悉,但[请在此尝试](https://help.ubuntu.com/community/UbuntuBootupHowto),并且在Writing Services部分中,将守护进程的调用放在说“回声“在这里放置bash代码” – Sorpigal

20

UNIX系统,您需要同时(只需打开新的shell窗口,如果你在一个GUI是),如果你需要携带的背景,使运行的进程,只需要能处理尽可能多的进程在运行一个保持运行的应用程序或进程后,使用当前shell窗口作为其他事情。

要运行一个名为命令在后台模式命令,你会使用:

command & 

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

+7

使用Sorgigal解决方案的优点是您可以关闭终端/ shell进程,并且该进程将继续运行。这不是使用&的情况,因为进程仍然连接到特定的shell进程,并在shell进程执行时退出。 – metasoarous

+2

为了让'command'在关闭shell之后继续运行,使用'nohup command&' – rem

1

对于使用bash进行高级作业控制,您应该查看命令jobsbgfg

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

+0

我知道这不是OP的解决方案,但是如果有人按照这个答案摇摆,知道你可以“放弃”作业即使在shell退出后,它们仍会继续在后台运行。 –

0

使用nohup的同时将输出到/ dev /空

nohup command &>/dev/null &

相关问题