Saya berada dalam situasi di mana Chef mungkin memulai layanan (postgres) tetapi selanjutnya mungkin akan dihentikan. Saya ingin menjalankan Chef berikutnya untuk menyebabkan layanan berjalan. Saya sudah mencoba ini:
service "postgresql" do
action :start
end
Tapi itu tidak berpengaruh, mengatakan (up to date)
mungkin karena Chef tahu itu sudah dimulai dan tidak dapat mengatakan bahwa itu telah berhenti. (Mungkin karena bagaimana service ... status
berperilaku untuk layanan ini?) Jika saya menulis ini:
# anti-pattern warning!
execute "force-start-postgresql" do
command "service postgresql start || /etc/init.d/postgresql start"
action :run
end
Saya mendapatkan perilaku yang diinginkan. Juga action :restart
membuatnya berjalan. Namun ini sepertinya anti-pola karena portabilitas (dan berpotensi menghentikannya sebelum memulai lagi dalam kasus terakhir).
Jadi, bagaimana saya bisa memberi tahu Chef untuk secara paksa memulai layanan, meskipun menurutnya sudah berjalan?
Ini menggunakan Chef 11.6, di-host oleh OpsCode, dan resep postgresql default. (Catatan ini mirip tapi saya pikir tidak persis sama dengan Bagaimana memaksa tindakan pada sumber daya "terkini" di Chef? )
--- EDIT (klarifikasi mengikuti posting jtimberland) ---
Di -l debug
sini menunjukkan:
DEBUG: service[postgresql] supports status, running
DEBUG: service[postgresql] is running
Bahkan ketika itu TIDAK berjalan. Jadi itu terdengar seperti satu bug, dan saya tertarik pada itu. Namun saya terutama tertarik pada apakah ada cara untuk memberitahu Chef "selalu memohon perintah mulai layanan, melewatkan pemeriksaan status". Itu pertanyaannya di sini.
(Saya bukan ahli tapi saya pikir cara paling portabel untuk memastikan layanan berjalan adalah memulai layanan dan itu hampir selalu idempoten. OTOH memeriksa apakah suatu layanan berjalan kurang konsisten dan saya tidak melihat mengapa kita harus peduli !)
sumber
:start
terlepas dari:status
. Saya juga berharap itu melakukanps -ef | grep [p]ostgresql
atau serupa, kalau tidak biasanya akan cocok dengan perintah grep sendiri dan dengan demikian selalu berpikir layanan berjalan (Atau mungkin itu masalah mendasarnya?)service start
hampir selalu idempoten jadi ini harus baik-baik saja.