如你所知,我对Gammu有意见。我使用Gammu与PRTG网络监视器一起发送SMS,它用于监视网络设备(即服务器、交换机、路由器、防火墙),每当重要的服务发生故障时,PRTG会执行我创建的一些批文件,这些文件通过Gammu调用发送SMS。
但是,每当一个或多个服务发生故障时,一些批处理文件根本不会被执行,我收到以下错误:
错误102错误开启装置。未知、忙或没有权限。
我见过许多与这个问题相关的话题,但我无法通过其中任何一个来解决我的问题。
我已经为Gammu配置了日志,这样无论发生什么事情都会被记录下来。我在这些日志中出现了两个错误:
System error - CreateFile in serial_open,32,“进程无法访问该文件,因为它正被另一个进程使用。" System error - SetCommState in serial_close,6,句柄无效。
我有一个关于第一个错误的问题:“进程无法访问文件,因为它正在被另一个进程使用。”它指的是哪个文件,Gammu还是我的批文件?
下面是我如何设置批处理文件的一个示例:
cd c:\Program Files (x86)\Gammu\bin
Rem User1
gammu sendsms TEXT 0123456789 -text "%*" -report
Rem User2
gammu sendsms TEXT 0123456789 -text "%*" -report在执行gammu sendsms之前,我尝试了超时机制,但它根本不起作用。你们有什么解决方案,让我如何让执行等待,直到其他进程完成,这样我就不会收到那条消息?
下面是gammuconfig:
[gammu]
device = com4:
connection = at115200
logfile = gammulog
logformat = errors
[gammu1]
device = com3:
connection = at115200
logfile = gammulog
logformat = errors提前谢谢你。
发布于 2020-06-08 16:33:15
这看起来像是一个进程锁定了发送SMS的整个系统(使用串行端口?)
在这种情况下,您需要重写脚本,使其不是并行发送这些消息,而是按顺序发送这些消息。使用队列是可行的方法。
一种可能是让PRTG执行批处理(或python)脚本,它会将消息添加到队列中。另一个将在循环中运行的进程将从队列中获取新消息并处理它们(发送消息)。这样你就不会不止一次执行Gammu了。这种解决方案的缺点是,如果您有许多警报,则需要更长时间才能发送它们,因为Gammu不支持并行处理
另一种选择是使用一些internet sms网关,它允许您一次发送多条短消息。
https://stackoverflow.com/questions/62080201
复制相似问题