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
这里的想法是当 CPU 核心温度过大时启动这项工作(实际上是一项任务)。
如果 upstart 还不支持算术关系运算符,我不会感到惊讶。但是这种语法也不起作用。
start on coretemp TEMP=[60,61,62,63,...,79,80]
stop on coretemp TEMP=[30,31,32,33,...,49,50]
我是不是大错特错,试图让 upstart 做一些它不应该做的事情?
到目前为止,我唯一可行的解决方案是让我的温度监控守护进程发出自定义事件:
coretemp-above-60
coretemp-below-50
答案1
在我看来,坦率地说,“你做错了。”:)
启动脚本中不应该有配置逻辑 - 它应该在配置文件中。因此,您的温度监控守护进程应该发出coretemp-too-hot
并coretemp-nominal
有一个配置文件来指定断点。这样,您只需更改配置文件中的值(如果需要,多个应用程序可以查看它的一个地方),而不必编辑您的 upstart 文件。
或者,如果你想忽略我(由你自己决定!),你可以尝试:
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
roast 程序的条件就变得简单了
start on coretemp TEMPERATURE=60
stop on coretemp TEMPERATURE=50
exec cpuroast
唯一的缺点是启动时脚本会发出一堆温度事件。在我的情况下,所有温度都在 25° 和初始温度之间。我必须这样做,以防系统在环境温度高于 60° 时启动。