我有一个脚本,根据某些参数控制12v继电器阵列。举个例子:我正在监测温度和压力。如果温度超过某个值,将拉入继电器以打开通风口并启动风扇。如果温度下降到一定值,继电器将被释放,通风口将关闭,风扇将停止。与压力相同,压力将打开电磁阀并根据压力值再次关闭。
一切正常,我很开心。脚本(bash)在启动时启动。但是,有时脚本会神秘地死掉,使继电器处于“活动”状态。
当脚本死亡时,有没有办法确保将继电器重置为“非活动”或“未通电”?
答案 0 :(得分:2)
继续发表评论,您可以捕获脚本可以接收的任何信号(SIGKILL
和SIGSTOP
除外),这些信号会将其关闭并使用trap
拦截收到的信号并运行所需的命令将继电器重置为" not-active"或者"在进程死亡之前未通电" 状态。
使用trap
非常简单。您只需在脚本顶部设置陷阱,列出捕获信号时要执行的命令。对于简单的命令,你可以做
trap 'command1; command2` SIGTERM SIGINT EXIT
在收到三个列出的信号中的任何一个时运行command1
和command2
。如果您需要执行一系列命令,请声明一个函数,然后trap
执行信号接收功能,例如
cleanup () {
# any number of commands to run
}
trap cleanup SIGTERM SIGINT EXIT
有关标准信号的附加信息,请参阅man 7 signals
。有关man bash
的其他信息,请参阅trap
(或在" 中使用bash中的陷阱"进行搜索)。