
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-event
for emitido e o argumento NAME
tiver 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-event
o argumento emitido QUANTITY
tiver valor 1
ou 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-hot
e coretemp-nominal
ter 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 on
as 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 on
condiçã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°.