Ubuntu

Ubuntu Upstart 作業 - 無法辨識“停止”命令

  • January 17, 2012

我需要一些幫助;無窮無盡的腳本看起來完全一樣——但我似乎無法停止與新貴腳本相關的工作。我在 EC2 上使用任何最新的 Ubuntu Elestic AMI,它從微型實例到大型實例都發生。

首先,我送出一個簡單的配置/etc/init/node-monitor.conf來啟動一個程序:

description "node-monitor"
start on (local-filesystems and net-device-up IFACE=eth0)
stop on shutdown
exec sudo -u root sh -c "cd /home/ubuntu/node-monitor/run && /usr/local/bin/node client.js ec2=true debug=false console=true cloudwatch=true >> /var/log/node-monitor.log 2>&1 &"

這適用於開始:

sudo start node-monitor
node-monitor start/running, process 1580

但不會停止:

sudo stop node-monitor
stop: Unknown instance: 

然後我嘗試了一些更複雜的東西,基於另一個 node.js 項目:

description "node-monitor"
start on (local-filesystems and net-device-up IFACE=eth0)
stop on shutdown
script
echo $$ > /var/run/node-monitor.pid
exec sudo -u root sh -c "cd /home/ubuntu/node-monitor/run && /usr/local/bin/node client.js ec2=true debug=false console=true cloudwatch=true >> /var/log/node-monitor.log 2>&1 &"
end script
pre-stop script
rm /var/run/node-monitor.pid
end script

但這也不起作用。我在山姆希爾做錯了什麼?

所以首先,upstart 以 root 身份執行所有作業,所以你不需要 sudo,擺脫它。

其次,您的監控程序似乎正在退出,因此出現“未知實例”錯誤。您應該在 /var/log/syslog 中得到一些資訊,告訴您該程序已退出。您可以添加“respawn”一詞,upstart 將嘗試重新啟動它,但如果它繼續快速退出,upstart 最終會放棄。

你用 & 結束你的行,這意味著“在後台執行”。鑑於此,upstart 將看到您的 shell 退出(因為作業控制在非互動式 shell 中不活動,& 將有效地守護任何作業)。如果您希望 upstart 保持此程序執行並能夠終止它,請刪除 &。

此外,您的開始過於明確,而您的停止是基於不存在的事件。你可以從執行級別開始

$$ 2345 $$, 並在執行級別停止$$ ^2345 $$,隨著 Ubuntu 的發展,這將幫助您在以後的版本中更好地工作。從 Ubuntu 11.10 開始,這也意味著它將在所有網路介面都啟動後啟動,而不僅僅是 eth0。 更有趣的是,您可以使用 ‘chdir’ 節,因此您根本不必使用 shell。

所以原來的工作最好寫成:

start on runlevel [2345]
stop on runlevel [^2345]

respawn
chdir /home/ubuntu/node-monitor/run
exec /usr/local/bin/node client.js ec2=true debug=false console=true cloudwatch=true >> /var/log/node-monitor.log 2>&1

對於獎勵積分,當 Ubuntu 12.04 發佈時,您可以使用新的“控制台日誌”功能並取出 >> /var/log/node-monitor.log ,儘管它會寫入 /var/log/upstart/node -monitor.log 代替。

最後,不再有真正的“alestic”AMI。Eric Hammond 保留了一個包含相同 AMI id 的表,這些 AMI id 列在https://cloud-images.ubuntu.com>上。將<http://alestic.comhttp://cloud-images.ubuntu.com/query/進行比較例如lucid/server/released.current.txt

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