Ubuntu Upstart 作業 - 無法辨識“停止”命令
我需要一些幫助;無窮無盡的腳本看起來完全一樣——但我似乎無法停止與新貴腳本相關的工作。我在 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.com與http://cloud-images.ubuntu.com/query/進行比較例如lucid/server/released.current.txt。