レベルに応じたアップスタートイベント

レベルに応じたアップスタートイベント

Upstart は、イベント引数に基づいてジョブを開始するためのサポートを提供します。

start on custom-event NAME=foo

custom-eventこれは、 が発行され、引数NAMEの値が の場合にのみジョブを開始しますfoo

また、一連の引数を開始する方法も提供します。

start on custom-event QUANTITY=[12]

custom-eventこれは、発行された引数にQUANTITY1またはのいずれかがある場合にのみジョブを開始します2

関係演算子を提供する方法がわかりません:

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

ここでの考え方は、CPU コアの温度が高くなりすぎたときにこのジョブ (実際にはタスク) を開始することです。

Upstart がまだ算術関係演算子をサポートしていないとしても驚きません。ただし、この構文も機能しません。

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

答え1

率直に言うと、「やり方が間違っている」ように思えます。:)

スタートアップ スクリプトには構成ロジックは含まれず、構成ファイルに含まれる必要があります。したがって、温度監視デーモンは および を発行しcoretemp-too-hotcoretemp-nominalそのブレークポイントを指定する構成ファイルを持つ必要があります。こうすることで、起動ファイルを編集する代わりに、構成ファイル (必要に応じて複数のアプリが参照できる 1 つの場所) の値を変更するだけで済みます。

あるいは、私を無視したい場合(それはあなた自身の責任ですが)、次のことを試してみてください。

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

これが、あなたが到達できる最も近い値だと思います。

答え2

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° を超えるときにシステムが起動された場合に備えて、これを実行する必要があります。

関連情報