硬件控制杀脚本

Killing script with hardware control

我有一个脚本可以根据特定参数控制一组 12v 继电器。例如:我正在监测温度和压力。如果温度超过特定值,继电器将被拉入以打开通风口并启动风扇。如果温度下降到某个值,继电器将被释放,通风口将关闭,风扇将停止。与压力相同,它将根据压力值打开电磁阀并再次关闭它。

一切正常,我很高兴。脚本 (bash) 在启动时启动。但是,有时脚本会神秘地死掉,这会使中继处于 "active" 状态。

有没有办法确保在脚本结束时将继电器重置为 "not-active" 或 "unenergized"?

继续我的评论,您可以捕获您的脚本可以接收的任何信号(SIGKILLSIGSTOP 除外),这些信号正在关闭它并使用 trap 拦截接收到信号和 运行 所需的命令 在进程终止之前将继电器重置为 "not-active" 或 "unenergized" 状态。

使用trap非常简单。您只需 在脚本顶部设置一个陷阱 ,列出捕获到信号时要执行的命令。对于简单的命令,您可以执行

trap 'command1; command2` SIGTERM SIGINT EXIT

到 运行 command1command2 收到列出的三个信号中的任何一个。如果您有一系列需要执行的命令,请声明一个函数,然后让 trap 在收到信号时执行该函数,例如

cleanup () {
    # any number of commands to run
}

trap cleanup SIGTERM SIGINT EXIT

有关标准信号的更多信息,请参阅 man 7 signals。查阅 man bash(或搜索“在 bash 中使用陷阱”)以获取有关 trap.

的更多信息