我正在尝试使用 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 来解决这个问题。