基于级别的新贵事件

基于级别的新贵事件

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-hotcoretemp-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 onroast 程序的条件就变得简单了

start on coretemp TEMPERATURE=60
stop on coretemp TEMPERATURE=50
exec cpuroast

唯一的缺点是启动时脚本会发出一堆温度事件。在我的情况下,所有温度都在 25° 和初始温度之间。我必须这样做,以防系统在环境温度高于 60° 时启动。

相关内容