作为一个后台进程/服务运行命令

16

我有一个Shell命令,想在后台运行,我读到可以在命令后面加上&使其作为后台进程运行。但我需要一些额外的功能,想知道如何实现:

  1. 我希望命令每次系统重新启动时都能自动以后台进程方式启动并运行。
  2. 我希望能够像使用service apache2 start命令一样随时启动和停止它。

该怎么做呢?是否有工具可以将其作为服务运行?

我对此有点困惑。

谢谢


顺便提一下,Unix中的“service”通常被称为守护进程,了解这一点可能会更容易找到相关信息。 - sorpigal
5个回答

27

Unix系统可以同时处理您需要的任意数量的进程(如果您在GUI中,请打开新的shell窗口),因此仅在必须在运行应用程序或持续运行的进程后继续使用当前shell窗口进行其他操作时,才需要在后台运行进程。

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

command &

这是一个特殊字符,一旦进程启动,它会将您返回到命令提示符。还有其他执行其他操作的特殊字符,更多信息请在这里查看。


7
使用Sorgigal的解决方案的优点是,您可以关闭终端/ shell进程,而该进程将继续运行。这与使用&不同,因为该进程仍然连接到特定的shell进程,并且如果shell进程退出,则进程也会退出。 - metasoarous
2
要在关闭终端后保持command运行,请使用nohup command& - rem

22

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


谢谢 Sorpigal。那很有帮助。 - Mridang Agarwalla
嗨Sorpigal。我知道我已经接受了这个答案,但你能告诉我如何让守护程序在启动时启动吗?我使用的是Ubuntu 10.4。谢谢。 - Mridang Agarwalla
1
@MridangAgarwalla:我对Ubuntu的新初始化系统不是很熟悉,但是请在这里尝试(https://help.ubuntu.com/community/UbuntuBootupHowto),并在“写作服务”部分中将您的守护程序调用放置在标有“echo "Put bash code here"`的位置。 - sorpigal

3

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

...另一种好的方法是使用screen,例如:

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

来自screen手册:

-d -m
以分离模式启动screen。这将创建一个新会话,但不会附加到它上面。这对于系统启动脚本非常有用。

也就是说,您可以关闭终端,进程仍将继续运行(与&不同)

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


1
felixmilea.com域名已不存在,该链接随机重定向到钓鱼页面。 - raratiru

2

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

nohup 命令 &>/dev/null &


1

如果你想要使用bash进行高级作业控制,你应该了解一下jobsbgfg命令。

然而,看起来你并不是真正想在后台运行命令。你想要做的是在启动时启动命令。这种方法因你所用的Unix系统而异,但可以尝试查看rc文件系列(例如Ubuntu上的/etc/rc.local)。它们包含将在init脚本之后执行的脚本。


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Seamus Connor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接