
Upstart bietet Unterstützung für das Starten von Jobs basierend auf Ereignisargumenten:
start on custom-event NAME=foo
Dadurch wird der Job nur gestartet, wenn custom-event
ausgegeben wird und das Argument NAME
den Wert hat foo
.
Es bietet außerdem eine Möglichkeit, mit einer Reihe von Argumenten zu beginnen:
start on custom-event QUANTITY=[12]
Dadurch wird der Job nur gestartet, wenn custom-event
das ausgegebene Argument QUANTITY
entweder den Wert 1
oder hat 2
.
Ich kann nicht herausfinden, wie ich einen Relationsoperator bereitstellen kann:
start on coretemp TEMP>60
stop on coretemp TEMP<50
Die Idee besteht darin, diesen Job (eigentlich eine Aufgabe) zu starten, wenn die CPU-Kerntemperatur zu hoch wird.
Es würde mich nicht überraschen, wenn Upstart noch keine arithmetischen Relationsoperatoren unterstützen würde. Allerdings funktioniert diese Syntax auch nicht.
start on coretemp TEMP=[60,61,62,63,...,79,80]
stop on coretemp TEMP=[30,31,32,33,...,49,50]
Liege ich völlig auf dem Holzweg, wenn ich versuche, den Emporkömmling zu etwas zu verleiten, was er nie tun sollte?
Meine einzige praktikable Lösung besteht bislang darin, dass mein Daemon zur Temperaturüberwachung benutzerdefinierte Ereignisse ausgibt:
coretemp-above-60
coretemp-below-50
Antwort1
Um es ganz offen zu sagen: Für mich sieht es so aus: „Du machst es falsch.“ :)
In den Startskripten sollte keine Konfigurationslogik enthalten sein, sondern in Konfigurationsdateien. Ihr Daemon zur Temperaturüberwachung sollte also eine Konfigurationsdatei ausgeben coretemp-too-hot
und coretemp-nominal
haben, die den Haltepunkt dafür angibt. Auf diese Weise ändern Sie einfach die Werte in der Konfigurationsdatei (ein Ort, an dem mehrere Apps sie bei Bedarf einsehen können), anstatt Ihre Upstart-Dateien bearbeiten zu müssen.
Oder wenn Sie mich ignorieren möchten (auf Ihre eigene Kappe!), können Sie Folgendes versuchen:
start on coretemp TEMP=[678][0123456789]
stop on coretemp TEMP=[34][0123456789]
und das ist ungefähr das Naheliegendste, das Sie meiner Meinung nach erreichen können.
Antwort2
Ich hätte immer noch gerne relationale Operatoren, die ich mit start/stop on
den Bedingungen von Upstart verwenden kann. Es sieht jedoch so aus, als hätte ich zu viel über das Problem nachgedacht.
Meine Lösung bestand darin, den Daemon zur Temperaturüberwachung bei jeder Änderung um einen Grad ein Coretemp-Ereignis ausgeben zu lassen. Wenn die Temperatur beispielsweise von 50° auf 55° springt, gibt der Daemon 51, 52, 53, 54 und 55 aus. Dann start on
wird die Bedingung für das Röstprogramm einfach
start on coretemp TEMPERATURE=60
stop on coretemp TEMPERATURE=50
exec cpuroast
Der einzige Nachteil ist, dass das Skript beim Start eine Reihe von Temperaturereignissen ausgibt. In meinem Fall alle Temperaturen zwischen 25 °C und der Anfangstemperatur. Ich muss dies tun, falls das System gebootet wird, wenn die Umgebungstemperatur über 60 °C liegt.