Evento inicial baseado no nível

Evento inicial baseado no nível

Upstart fornece suporte para iniciar trabalhos com base em argumentos de eventos:

start on custom-event NAME=foo

Isso só iniciará o trabalho quando custom-eventfor emitido e o argumento NAMEtiver o valor foo.

Ele também fornece uma maneira de começar com um conjunto de argumentos:

start on custom-event QUANTITY=[12]

Isso só iniciará o trabalho quando custom-evento argumento emitido QUANTITYtiver valor 1ou 2.

Não consigo descobrir como fornecer um operador de relação:

start on coretemp TEMP>60
stop on  coretemp TEMP<50

A ideia aqui é iniciar este trabalho (na verdade, uma tarefa) quando a temperatura do núcleo da CPU ficar muito grande.

Eu não ficaria surpreso se o upstart ainda não suportasse operadores de relações aritméticas. No entanto, esta sintaxe também não funciona.

start on coretemp TEMP=[60,61,62,63,...,79,80]
stop on  coretemp TEMP=[30,31,32,33,...,49,50]

Estou errado, tentando fazer com que o novato faça algo que nunca deveria fazer?

Até agora, minha única solução viável é fazer com que meu daemon de monitoramento de temperatura emita eventos personalizados:

coretemp-above-60
coretemp-below-50

Responder1

Parece-me, para ser franco: "Você está fazendo errado". :)

Não deveria haver lógica de configuração nos scripts de inicialização - deveria estar nos arquivos de configuração. Portanto, seu daemon de monitoramento de temperatura deve emitir coretemp-too-hote coretemp-nominalter um arquivo de configuração que especifique qual é o ponto de interrupção. Dessa forma, você apenas altera os valores no arquivo de configuração (um local onde vários aplicativos podem visualizá-lo, se necessário) em vez de ter que editar seus arquivos iniciais.

Ou se você quiser me ignorar (seja por sua conta!), Você pode tentar:

start on coretemp TEMP=[678][0123456789]
stop on coretemp  TEMP=[34][0123456789]

que é o mais próximo que eu acho que você conseguirá chegar.

Responder2

Ainda gostaria de ter operadores relacionais para usar com start/stop onas condições do Upstart. No entanto, parece que eu estava pensando demais no problema.

Minha solução foi fazer com que o daemon de monitoramento de temperatura emitisse um evento coretemp com cada grau de mudança. ou seja, se a temperatura saltar de 50° para 55°, o daemon emite 51, 52, 53, 54 e 55. Então a start oncondição para o programa de assado torna-se simples

start on coretemp TEMPERATURE=60
stop on coretemp TEMPERATURE=50
exec cpuroast

A única desvantagem é que, na inicialização, o script gera vários eventos de temperatura. No meu caso, todas as temperaturas entre 25° e a temperatura inicial. Tenho que fazer isso caso o sistema seja inicializado quando a temperatura ambiente estiver acima de 60°.

informação relacionada