我正在考虑在 MySQL 中为几个 Bash 脚本轮询实现一个状态表。这个想法是,一旦脚本#n-1完成运行并将其状态和状态写入 MySQL 数据库中的状态表,脚本#n就会被清除运行。基本上状态表看起来像:
+----+-------+--------+
| id | state | status |
+----+-------+--------+
| 44 | 2 | OK |
| 45 | 3 | OK |
| .. | ... | ... |
| 55 | 2 | OK |
+----+-------+--------+
该id
列auto_increment
可用于定义最后一行。
目前我想出了:
#!/bin/bash
#...
VARIABLE=$(mysql mydbname --skip-column-names -s --local -e \
"SELECT count(*) \
FROM statetable \
WHERE state=2 AND \
status='OK' AND \
id=(SELECT MAX(id) FROM statetable)")
if [ $VARIABLE -eq 1 ] ; then #...
是否有正确的方法来检查表中的最后一行是否具有所需的状态值和状态对(在上面的示例中为 2 和 OK)而不使用子查询并将该信息传递给 Bash 脚本?
添加的解决方案:
#!/bin/bash
function check_state () {
VARIABLE=$(mysql mydbname --skip-column-names -s --local -e \
"SELECT (state=2) && (status='OK') \
FROM statetable \
ORDER BY id DESC \
LIMIT 1;")
return $VARIABLE
}
if ! check_state ; then #...