Quais são as possíveis causas do erro do systemd "Falha ao enfileirar OnFailure = trabalho: conflito de recursos evitado"?

Quais são as possíveis causas do erro do systemd "Falha ao enfileirar OnFailure = trabalho: conflito de recursos evitado"?

Minhas onFailuretarefas do systemd não foram executadas e vejo isso no systemdiário:

: Falha ao enfileirar OnFailure= job: Impasse de recursos evitado

Quais são as possíveis causas que podem acionar esta mensagem e impedir OnFailure=a execução da minha tarefa?

Estou usando o systemd v229

Responder1

O que exatamente acontece aqui é: você aciona shutdown.target, o systemd usa o modo de trabalho 'substituir irreversivelmente' para ele. A unidade falha porque este alvo entra em conflito com todas as outras unidades e provoca uma parada para elas. Enquanto isso, sua unidade deve ter falhado, então aciona OnFailure= unit. Agora, por padrão, isso também Conflicts= with shutdown.target, portanto, irá acionar uma parada para ele. Mas, como o modo de trabalho foi substituído de forma irreversível, ele não pode cancelar esse trabalho e substituí-lo, e o systemd considera que esta é uma transação conflitante e, portanto, é abortada. manager_add_job falha e esse erro de barramento é mapeado para EDEADLK errno, portanto você verá String evitada de impasse de recursos.

Responder2

Isso pode ser acionado em uma configuração de sistema projetada para inicializar um sistema, executar uma única tarefa e depois desligar. O serviço systemd que também contém a OnFailure=tarefa com falha também pode conter:

ExecStopPost=/usr/bin/sudo /sbin/poweroff

Há um impasse porque, para terminar de desligar a unidade, os comandos de desligamento precisam ser executados. Mas para que o comando poweroff termine de funcionar, é necessário parar a unidade.

Enquanto isso, o OnFailure=trabalho está tentando ser executado enquanto esse impasse ocorre.

Em última análise, parece que a poweroffação logo "vence" o impasse, também impedindo a OnFailure=execução da tarefa.

Uma solução alternativa na AWS é definir um alarme CloudWatch na instância. O alarme terá a opção "Executar ação: desligamento" se o máximo de CPU na instância for inferior a 1% da CPU por 15 minutos.

informação relacionada