定时监测打印机状态

·614 Views·

学校经常会让家长打印一些作业之类的文件,所以家里的打印机一直都需要保持 7 * 24 小时开机状态,避免远程打印,打印机不可用。

相信有同学会有些疑问:

  1. 为什么打印机需要 7* 24 小时不间断开机?
  2. 打印机直接和电脑链接,随时打印,随时开机呗。
  3. 现在打印机有远程 APP ,就能直接看状态

先回答第二个问题。小朋友需要打印时,家长可能或者大概率是不在家的。就我们家而言,小朋友他奶奶经常在家,但我们会有不在家的情况(遇到我们有事,小朋友放学后,会自己先回家) ,他们是不会用打印机和电脑的。同时小朋友还着急要,所以需要打印机能远程访问并随时可以打印。

基于这个原因,第一个问题,就不是问题了。

我们家的打印机是 HP 1106 ,只支持 USB,连网线口都没有,更别提远程 APP了。

为啥买 HP 1106 ?这个有点背景。当时去某医院看病,发现打印病历单的打印机就是这款,回来查了查,这款是商用型打印机,无论是启动、打印速度,稳定性,可靠性都是家用型不可比的,后来就在闲鱼上,花了300 多买了一个二手的,到现在自己只换过一个搓纸轮(这个是消耗品,打印机时间长了,这个东东都会磨损,属于正常范围),矽鼓还没换(当时买家说换过一个次,还是下80%的粉)。

基于以上情况,家里的打印机拓扑结构是:

  • 打印机直接和路由器连接,路由器充当远程服务器角色。
  • 其他设备,如电脑,平板,手机使用 wifi 和路由器相连。

这就引出了开头讲的问题,需要打印机 7 * 24 小时随时都 Ready。虽说家里不怎么停电,但偶尔还是有的,比如说前天下午,收到打印机离线的消息,目前解决方式是让家里人手动(如何自动重启,正在解决中...)按打印机开关重启。

那怎么实现的打印机一旦离线,就能自动知晓呢?

这里写了个 Shell,定时去检测打印机是否和路由器连接,如果没有连接就自动发告警信息到手机。

对于路由器而言,打印机无非也是一个 USB 设备,所以通过检测 lsusb 信息,就能知晓打印机的状态。

下面代码放到 crontab 定时任务里,固定每小时监测一次。

1#!/bin/bash
2# 0 */1 * * * /bin/sh /opt/web/shell-collection/check-hp-1106-printer.sh
3
4MESSAGE_PUSHER_SERVER="<http://192.168.100.1:7030/push/root>"
5
6TIME=$(date +%Y-%m-%d" "%H:%M:%S)
7
8function send_message {
9 # POST Form
10 curl -s -X POST "$MESSAGE_PUSHER_SERVER" \\
11 -d "title=$1&description=$2&content=$3" \\
12 >/dev/null
13}
14
15result="$(lsusb | grep P1106 2>/dev/null)"
16
17echo $result
18
19if [ "${result}" = "" ];then
20 send_message 'Check HP Printer Fail' "$TIME 执行 check-hp-1106-printer.sh"
21fi


收到的报警信息如下: