Upstart 创建两个进程而不是一个进程

Upstart 创建两个进程而不是一个进程

我正在尝试使用 ubuntu upstart 创建一个简单的 echo 服务。

由于某种原因,upstart 的行为非常奇怪。当它第一次启动 echo 服务器时一切正常,但当它第二次、第三次等启动时,它会创建两个进程。

它不是 fork,也不是守护进程。

请看下面的例子。我几乎读完了所有的 upstart 文档,但不明白它的意思。如果能得到任何帮助,我将不胜感激。

root@z-server:~# cat /etc/init/echoservice.conf
exec ncat -l 7 -k -e "/bin/cat"
root@z-server:~#
root@z-server:~#
root@z-server:~# start echoservice
echoservice start/running, process 1383
root@z-server:~#
root@z-server:~#
root@z-server:~# ps aux | grep -v grep | grep -i ncat
root      1383  0.0  0.0  17348  1328 ?        Ss   22:11   0:00 ncat -l 7 -k -e /bin/cat
root@z-server:~#
root@z-server:~# stop echoservice
echoservice stop/waiting
root@z-server:~#
root@z-server:~# ps aux | grep -v grep | grep -i ncat
root@z-server:~#
root@z-server:~# start echoservice
echoservice start/running, process 1401
root@z-server:~#
root@z-server:~# ps aux | grep -v grep | grep -i ncat
root      1401  0.0  0.0   4440   624 ?        Ss   22:12   0:00 /bin/sh -e -c ncat -l 7 -k -e "/bin/cat" /bin/sh
root      1402  0.0  0.0  17348  1324 ?        S    22:12   0:00 ncat -l 7 -k -e /bin/cat
root@z-server:~#
root@z-server:~#
root@z-server:~# stop echoservice
echoservice stop/waiting
root@z-server:~#
root@z-server:~# ps aux | grep -v grep | grep -i ncat
root@z-server:~#
root@z-server:~# start echoservice
echoservice start/running, process 1411
root@z-server:~#
root@z-server:~#
root@z-server:~# ps aux | grep -v grep | grep -i ncat
root      1411  0.0  0.0   4440   628 ?        Ss   22:12   0:00 /bin/sh -e -c ncat -l 7 -k -e "/bin/cat" /bin/sh
root      1412  0.0  0.0  17348  1324 ?        S    22:12   0:00 ncat -l 7 -k -e /bin/cat
root@z-server:~#
root@z-server:~# kill -9 1411
root@z-server:~#
root@z-server:~# ps aux | grep -v grep | grep -i ncat
root      1412  0.0  0.0  17348  1324 ?        S    22:12   0:00 ncat -l 7 -k -e /bin/cat
root@z-server:~#
root@z-server:~# initctl status echoservice
echoservice stop/waiting
root@z-server:~#
root@z-server:~# start echoservice
echoservice start/running, process 1421
root@z-server:~#
root@z-server:~# ps aux | grep -v grep | grep -i ncat
root      1412  0.0  0.0  17348  1324 ?        S    22:12   0:00 ncat -l 7 -k -e /bin/cat
root@z-server:~#

答案1

尝试删除 周围的引号/bin/cat。请这样做:

exec ncat -l 7 -k -e /bin/cat

我这样说的原因是文档中说:

任何特殊字符(例如引号或“$”)都将导致整个命令被传递给 shell 进行扩展。

在这种情况下,不需要通过 shell 调用命令,因此让我们使其更简单,以便您不需要使用 shell。

如果您确实想使用 shell,那么您可以明确使用script...节并在其中end script明确使用 shell命令。exec

我不确定你为什么会出现原来的行为,但我认为你可以通过首先避免使用 shell 来解决这个问题。

相关内容