at命令发送和接收短信
在Linux和Unix-like系统中,at命令是一个强大的定时任务工具,通常用于安排在指定时间执行命令或脚本,通过结合短信网关或特定工具,at命令也可以用于实现短信的发送和接收功能,本文将详细介绍如何利用at命令实现短信的定时发送与接收,包括配置步骤、注意事项以及实际应用场景。

at命令的基本用法
at命令的基本语法为:
at [时间] [日期]
要在下午3点执行脚本,可以输入:
at 3:00 PM
进入交互模式后,输入要执行的命令或脚本路径,按Ctrl+D保存。
使用at命令发送短信
要通过at命令发送短信,需先配置短信网关(如GSM调制解调器或云短信服务),以下是具体步骤:
-
安装依赖工具
确保系统已安装at命令和短信发送工具(如gnokii或gammu),以gammu为例:sudo apt install gammu at
-
配置短信网关
编辑gammu配置文件(通常为/etc/gammurc),设置设备路径和短信中心号码:[gammu] device = /dev/ttyUSB0 connection = at115200
-
编写短信发送脚本
创建一个脚本(如send_sms.sh):#!/bin/bash gammu-smsd-inject TEXT "目标号码" -text "短信内容"
赋予执行权限:

chmod +x send_sms.sh
-
使用at命令定时发送
在每天早上8点发送短信:echo "/path/to/send_sms.sh" | at 8:00 AM daily
使用at命令接收短信
接收短信需要结合gammu的监控功能和at命令的定时任务,以下是实现方法:
-
配置短信监控
修改gammu配置文件,启用短信监控:[smsd] run_on_receive = /path/to/receive_sms.sh
-
编写接收脚本
创建receive_sms.sh,处理接收到的短信:#!/bin/bash gammu getallsms | grep -oP '(?<=Number: )d+' > /tmp/sender.txt gammu getallsms | grep -oP '(?<=Text: ).*' > /tmp/message.txt
-
使用at命令定时处理
每分钟检查一次新短信:*/1 * * * * /path/to/receive_sms.sh
注意事项
-
权限问题
确保at命令和短信工具具有执行权限,脚本需以root用户运行(若涉及设备访问)。 -
时间格式
at命令支持多种时间格式(如now + 1 hour、3:00 PM tomorrow),需根据需求灵活使用。 -
日志记录
建议在脚本中添加日志功能,便于排查问题:
echo "$(date): 短信发送成功" >> /var/log/sms.log
应用场景
-
定时提醒
如会议通知、生日祝福等,提前通过at命令发送短信。 -
自动化监控
结合系统监控工具,在异常发生时触发短信报警。
相关问答FAQs
Q1: 如何验证at命令是否成功发送短信?
A1: 可以通过以下方式验证:
- 检查
/var/log/syslog或gammu日志,确认短信是否被调用。 - 使用
atq命令查看待执行任务,确认任务是否在队列中。 - 直接运行短信脚本(
./send_sms.sh),观察是否立即生效。
Q2: at命令接收短信时如何避免重复处理?
A2: 可以在接收脚本中添加去重逻辑,
- 记录已处理短信的ID或时间戳到文件。
- 每次处理前检查文件,避免重复执行。
示例代码:#!/bin/bash last_id=$(cat /tmp/last_sms_id.txt 2>/dev/null) current_id=$(gammu getallsms | grep -oP '(?<=Index: )d+') if [ "$current_id" != "$last_id" ]; then gammu getallsms | grep -oP '(?<=Text: ).*' > /tmp/message.txt echo "$current_id" > /tmp/last_sms_id.txt fi
通过合理配置和使用at命令,可以实现高效的短信自动化管理,适用于个人或企业场景。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/71606.html