Ubuntu

殺不死的暴發戶程序

  • August 17, 2015

因此,我根據本文中的腳本編寫了一個看似基本的 node.js 伺服器 upstart 腳本,它工作正常,啟動伺服器並在預期的埠上執行。當我試圖殺死它時,問題就來了。

我嘗試了一些命令,比如stop socketserverand initctl stop socketserver(功能等效)或者kill它們都做了兩件事:成功結束程序,然後在不同的 pid 下重新啟動它。

我只想讓這個過程在我告訴它時結束,但在它不是有效的退出程式碼時重新生成;我做錯了什麼?

description "node.js Socket Server"
author      "moberemk"

start on started
stop on shutdown

# Automatically Respawn
respawn
respawn limit 10 5

script
   # Not sure why $HOME is needed, but we found that it is:
   export HOME="/root"
   export SOCKETSERVER_PORT=5000

   exec sudo -u root /usr/bin/nodejs /vagrant/webroot/socketserver/app.js
end script

(我也知道腳本可能會放棄這個,但我在使用 Ubuntu 14.04 的 Vagrant 機器上執行它)

看起來好像你在指示暴發戶做一些非常了不起的事情:

start on started

此行不會觸發語法錯誤。但通常你會start像這樣指定一個節:

start on started some-other-service

假設您希望您的 nodejs 服務在啟動時執行(並假設它需要網際網路連接)也許您打算執行以下操作:

start on (local-filesystems and net-device-up IFACE!=lo)

編輯

start on started

在進一步調查之後,我確定這節實際上會導致暴發戶在另一個服務完成啟動時執行您的服務,這可以解釋為什麼您的程序被渲染為無法殺死。

引用自:https://serverfault.com/questions/708056