私は、Rails アプリケーションの監視システムであるMonit http://railscasts.com/episodes/375-monit?view=asciicastに関する Ryan Bates の Railscast をフォローしています。その中で、彼はコマンドで実行される monit (以下を参照) のカピストラーノ レシピを作成しますcap monit:setup
。実行すると、このメッセージで失敗します
command finished in 200ms
failed: "sh -c 'sudo -p '\\''sudo password: '\\'' service monit reload'" on 192.XXX.XXX.XXX
これは明らかにパスワード関連のエラーですが、スクリプトが実行する以前のコマンドstart stop restart syntax reload
はreload
.
スクリプトの最後から 2 番目の行が を使用していることに注意して、別のユーザー名で (ただし sudo 権限を使用して) サーバーにログインしているため、これroot
も問題であると考えました。root
そのため、root
最後の 2 行目を自分のユーザー名に変更してcap monit:setup
再度実行しましたが、同じエラーが発生しました。
* 2013-07-10 05:52:01 executing `monit:syntax'
* executing "sudo -p 'sudo password: ' service monit syntax"
servers: ["192.XXX.XXX.XXX"]
[192.XXX.XXX.XXX] executing command
** [out :: 192.XXX.XXX.XXX] Control file syntax OK
command finished in 248ms
* 2013-07-10 05:52:02 executing `monit:reload'
* executing "sudo -p 'sudo password: ' service monit reload"
servers: ["192.XXX.XXX.XXX"]
[192.XXX.XXX.XXX] executing command
** [out :: 192.XXX.XXX.XXX] Usage: /etc/init.d/monit {start|stop|restart|force-reload|syntax}
command finished in 200ms
failed: "sh -c 'sudo -p '\\''sudo password: '\\'' service monit reload'" on 192.XXX.XXX.XXX
Monit.rb レシピ
namespace :monit do
desc "Install Monit"
task :install do
run "#{sudo} apt-get -y install monit"
end
after "deploy:install", "monit:install"
desc "Setup all Monit configuration"
task :setup do
monit_config "nginx"
syntax
reload
end
after "deploy:setup", "monit:setup"
%w[start stop restart syntax reload].each do |command|
desc "Run Monit #{command} script"
task command do
run "#{sudo} service monit #{command}"
end
end
end
def monit_config(name, destination = nil)
destination ||= "/etc/monit/conf.d/#{name}.conf"
template "monit/#{name}.erb", "/tmp/monit_#{name}"
run "#{sudo} mv /tmp/monit_#{name} #{destination}"
run "#{sudo} chown root #{destination}"
run "#{sudo} chmod 600 #{destination}"
end