Sono in una situazione in cui Chef potrebbe avviare un servizio (postgres) ma potrebbe successivamente essere interrotto fuori banda. Voglio una successiva corsa dello Chef per far funzionare il servizio. Ho provato questo:
service "postgresql" do
action :start
end
Ma non ha alcun effetto, dicendo (up to date)
presumibilmente perché Chef sa che è stato avviato e non è in grado di dire che si è fermato. (Forse a causa di come service ... status
si comporta per questo servizio?) Se scrivo questo:
# anti-pattern warning!
execute "force-start-postgresql" do
command "service postgresql start || /etc/init.d/postgresql start"
action :run
end
Ottengo il comportamento desiderato. Inoltre action :restart
lo fa funzionare. Tuttavia, questi sembrano anti-pattern a causa della portabilità (e potenzialmente lo fermano prima di riavviarlo in quest'ultimo caso).
Quindi, come posso dire a Chef di avviare forzatamente il servizio, anche se pensa che sia già in esecuzione?
Questo utilizza Chef 11.6, ospitato da OpsCode e la ricetta postgresql predefinita. (Si noti che questo è simile ma penso che non sia esattamente lo stesso di Come forzare azioni su risorse "aggiornate" in Chef? )
--- MODIFICA (chiarimento dopo post jtimberland) ---
Il -l debug
qui mostra:
DEBUG: service[postgresql] supports status, running
DEBUG: service[postgresql] is running
Anche quando NON è in esecuzione. Quindi sembra un bug, e mi interessa. Tuttavia sono principalmente interessato a sapere se esiste un modo per dire a Chef "invoca sempre il comando di avvio del servizio, saltando il controllo dello stato". Questa è la domanda qui.
(Non sono un esperto, ma penso che il modo più portatile per garantire che un servizio sia in esecuzione è quello di avviare il servizio e questo è quasi sempre idempotente. OTOH verifica se un servizio è in esecuzione è meno coerente e non vedo perché dovremmo preoccuparci !)
:start
prescindere dal:status
. Spero anche che faccia unps -ef | grep [p]ostgresql
o simile, altrimenti corrisponderà di solito al suo comando grep e quindi penso sempre che il servizio sia in esecuzione. (O forse è questo il problema di fondo?)