• 导航

定时监测打印机状态

记事本 2024-06-04 69 次浏览
学校经常会让家长打印一些作业之类的文件,所以家里的打印机一直都需要保持 7 * 24 小时开机状态,避免远程打印,打印机不可用。
相信有同学会有些疑问:
1.
为什么打印机需要 7* 24 小时不间断开机?
2.
打印机直接和电脑链接,随时打印,随时开机呗。
3.
现在打印机有远程 APP ,就能直接看状态
先回答第二个问题。小朋友需要打印时,家长可能或者大概率是不在家的。就我们家而言,小朋友他奶奶经常在家,但我们会有不在家的情况(遇到我们有事,小朋友放学后,会自己先回家) ,他们是不会用打印机和电脑的。同时小朋友还着急要,所以需要打印机能远程访问并随时可以打印。
基于这个原因,第一个问题,就不是问题了。
我们家的打印机是 HP 1106 ,只支持 USB,连网线口都没有,更别提远程 APP了。
为啥买 HP 1106 ?这个有点背景。当时去某医院看病,发现打印病历单的打印机就是这款,回来查了查,这款是商用型打印机,无论是启动、打印速度,稳定性,可靠性都是家用型不可比的,后来就在闲鱼上,花了300 多买了一个二手的,到现在自己只换过一个搓纸轮(这个是消耗品,打印机时间长了,这个东东都会磨损,属于正常范围),矽鼓还没换(当时买家说换过一个次,还是下80%的粉)。
基于以上情况,家里的打印机拓扑结构是:
打印机直接和路由器连接,路由器充当远程服务器角色。
其他设备,如电脑,平板,手机使用 wifi 和路由器相连。
这就引出了开头讲的问题,需要打印机 7 * 24 小时随时都 Ready。虽说家里不怎么停电,但偶尔还是有的,比如说前天下午,收到打印机离线的消息,目前解决方式是让家里人 手动 (如何自动重启,正在解决中...)按打印机开关重启。
那怎么实现的打印机一旦离线,就能自动知晓呢?
这里写了个 Shell,定时去检测打印机是否和路由器连接,如果没有连接就自动发告警信息到手机。
对于路由器而言,打印机无非也是一个 USB 设备,所以通过检测 lsusb 信息,就能知晓打印机的状态。
下面代码放到 crontab 定时任务里,固定每小时监测一次。
      
  #!/bin/bash
# 0 */1 * * * /bin/sh /opt/web/shell-collection/check-hp-1106-printer.sh

MESSAGE_PUSHER_SERVER="http://192.168.100.1:7030/push/root"

TIME=$(date +%Y-%m-%d" "%H:%M:%S)


function send_message {
# POST Form
curl -s -X POST "$MESSAGE_PUSHER_SERVER" \
-d "title=$1&description=$2&content=$3" \
>/dev/null
}

result="$(lsusb | grep P1106 2>/dev/null)"

echo $result

if [ "${result}" = "" ];then
send_message 'Check HP Printer Fail' "$TIME 执行 check-hp-1106-printer.sh"
fi
收到的报警信息如下: