Upstart обеспечивает поддержку запуска заданий на основе аргументов событий:
start on custom-event NAME=foo
Это запустит работу только тогда, когда custom-event
испускается и аргумент NAME
имеет ценность foo
.
Он также предоставляет возможность начать с набора аргументов:
start on custom-event QUANTITY=[12]
Это запустит работу только тогда, когда custom-event
испускаемый аргумент QUANTITY
имеет значение 1
или 2
.
Я не могу понять, как предоставить оператор отношения:
start on coretemp TEMP>60
stop on coretemp TEMP<50
Идея здесь состоит в том, чтобы запустить эту работу (на самом деле задачу), когда временная температура ядра процессора становится слишком большой.
Я не удивлюсь, если выскочка еще не поддержала операторы арифметических отношений. Однако этот синтаксис тоже не работает.
start on coretemp TEMP=[60,61,62,63,...,79,80]
stop on coretemp TEMP=[30,31,32,33,...,49,50]
Неужели я сбился с пути, пытаясь заставить выскочку сделать то, для чего он никогда не предназначался?
Пока что мое единственное работоспособное решение - заставить мой демон мониторинга температуры выдавать настраиваемые события:
coretemp-above-60
coretemp-below-50
Мне кажется, если быть откровенным: «Ты делаешь это неправильно». :)
В сценариях запуска не должно быть логики конфигурации - она должна быть в файлах конфигурации. Итак, ваш демон контроля температуры должен выдать coretemp-too-hot
и coretemp-nominal
и иметь файл конфигурации, в котором указывается точка останова для этого. Таким образом, вы просто меняете значения в файле конфигурации (одно место, где несколько приложений могут просматривать его, если это необходимо) вместо того, чтобы редактировать файлы выскочки.
Или, если вы хотите игнорировать меня (пусть даже на своей голове!), Вы можете попробовать:
start on coretemp TEMP=[678][0123456789]
stop on coretemp TEMP=[34][0123456789]
что примерно так близко, как я думаю, вы сможете добраться.
Я все еще хотел бы иметь реляционные операторы для использования с Upstart start/stop on
условия. Однако, похоже, я слишком долго думал над проблемой.
Мое решение заключалось в том, чтобы демон мониторинга температуры выдавал событие coretemp при каждой степени изменения. т.е. если температура подскакивает с 50 ° до 55 °, демон излучает 51, 52, 53, 54 и 55. Затем start on
условие программы обжарки становится простым
start on coretemp TEMPERATURE=60
stop on coretemp TEMPERATURE=50
exec cpuroast
Единственным недостатком является то, что при запуске скрипт выдает несколько температурных событий. В моем случае все температуры от 25 ° до начальной. Я должен это сделать, если система загружается при температуре окружающей среды выше 60 °.