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

时间:2011-11-17 09:16:25

标签: bash shell unix service background-process

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

  1. 我希望每次系统重启时都能在后台启动和运行命令。
  2. 我希望能够在需要时启动和停止它,就像可以service apache2 start一样。
  3. 我该如何解决这个问题?是否有工具允许我将命令作为服务运行?

    我有点失落。

    由于

5 个答案:

答案 0 :(得分:24)

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

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

command &

这是一个特殊字符,一旦进程启动,就会返回命令提示符。还有其他特殊字符可以执行其他操作,可以使用更多信息here

答案 1 :(得分:21)

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

答案 2 :(得分: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
  以分离模式启动屏幕。这会创建一个新会话但​​不会附加到该会话。这对系统启动脚本很有用。

即。您可以关闭终端,该过程将继续运行(与&不同)

使用screen您也可以稍后重新加入会话

答案 3 :(得分:1)

对于使用bash的高级作业控制,您应该查看命令jobs bgfg

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

答案 4 :(得分:0)

将输出定向到/ dev / null

时使用nohup

nohup command &>/dev/null &