Şef'in bir hizmet (postgres) başlatabileceği bir durumdayım, ancak daha sonra bant dışı bırakılabilir. Hizmetin çalışmasını sağlamak için sonraki bir şef çalıştırmak istiyorum. Bunu denedim:
service "postgresql" do
action :start
end
Ama (up to date)
muhtemelen , şefin başlatıldığını bildiğini ve durduğunu söyleyemediğini söyleyerek hiçbir etkisi yoktur . (Muhtemelen service ... status
bu hizmet için nasıl davranıyor?)
# anti-pattern warning!
execute "force-start-postgresql" do
command "service postgresql start || /etc/init.d/postgresql start"
action :run
end
İstenen davranışı elde ederim. Ayrıca bir çalışma action :restart
yapar. Bununla birlikte, bunlar taşınabilirlik nedeniyle anti-paternler gibi görünür (ve ikinci durumda tekrar başlatmadan önce potansiyel olarak durdurur).
Peki, Chef'e zaten çalıştığını düşünmesine rağmen servisi zorla başlatmasını nasıl söyleyebilirim?
Bu OpsCode tarafından barındırılan Chef 11.6 ve varsayılan postgresql tarifi kullanıyor. (Bu benzer ancak ben aynı değil düşünmek Not Şef "güncel" kaynaklar üzerindeki eylemleri zorlamak nasıl? .)
--- EDIT (jtimberland yazısını takiben açıklama) ---
-l debug
Burada şovları:
DEBUG: service[postgresql] supports status, running
DEBUG: service[postgresql] is running
Çalışmıyorken bile. Yani bu bir hata gibi geliyor ve ben bununla ilgileniyorum. Ancak öncelikle Chef'e "her zaman servis başlatma komutunu çağır, durum kontrolünü atla" demenin bir yolu olup olmadığıyla ilgileniyorum. Burada soru bu.
(Uzman değilim ama bir hizmetin çalışmasını sağlamanın en taşınabilir yolunun hizmeti başlatmak olduğunu düşünüyorum ve neredeyse her zaman idempotent. OTOH bir hizmetin çalışıp çalışmadığını kontrol etmek daha az tutarlı ve neden önemsememiz gerektiğini anlamıyorum !)
:start
bakılmaksızın arasında:status
. Ayrıca umarım birps -ef | grep [p]ostgresql
veya benzeri yapar, başka genellikle kendi grep komutuyla eşleşir ve böylece her zaman hizmetin çalıştığını düşünür. (Ya da belki de temel sorun budur?)