如何在Gammu守护进程中访问环境变量实现短信日志记录?
嘿,我刚好有过用Gammu处理短信日志的经验,咱们一步步来解决这个问题!
如何访问Gammu守护进程设置的环境变量并实现短信日志记录
首先得明确:Gammu的短信守护进程(gammu-smsd)在触发脚本时,会自动注入一系列以SMS_开头的环境变量——比如SMS_NUMBER(发件人号码)、SMS_TEXT(短信内容)、SMS_DATE(接收时间)等,这些变量只有当脚本被gammu-smsd调用时才会存在,手动运行脚本肯定看不到,这点你抓得很准~
第一步:配置Gammu守护进程关联你的脚本
先确保你的脚本已经在Gammu的配置文件里正确注册。打开Gammu的主配置文件(通常是/etc/gammu-smsdrc,如果是用户级配置就是~/.gammurc),找到[smsd]区块,添加RunOnReceive指定你的脚本路径:
[gammu] # 这里是你的设备基础配置,比如端口、连接方式 port = /dev/ttyUSB0 connection = at [smsd] service = files logfile = /var/log/gammu-smsd.log # 关键:指定接收短信时自动运行的脚本 RunOnReceive = /path/to/your/sms-logger.sh
保存配置后,重启Gammu守护进程让设置生效:
sudo systemctl restart gammu-smsd
第二步:在脚本中读取Gammu的环境变量
现在脚本被gammu-smsd调用时,就能直接读取这些环境变量了。下面给个bash脚本的示例,把短信信息写入日志文件:
#!/bin/bash # 定义日志文件路径,确保运行gammu-smsd的用户有写入权限 LOG_FILE="/var/log/gammu-received-sms.log" # 先做个判断:如果是手动运行脚本,直接报错退出 if [ -z "$SMS_NUMBER" ] || [ -z "$SMS_TEXT" ]; then echo "[$(date "+%Y-%m-%d %H:%M:%S")] 错误:此脚本必须由gammu-smsd运行!" >> "$LOG_FILE" exit 1 fi # 把短信信息格式化写入日志 echo "[$(date "+%Y-%m-%d %H:%M:%S")] 发件人:$SMS_NUMBER | 内容:$SMS_TEXT" >> "$LOG_FILE" # 可选:如果需要记录更多字段,比如短信中心号码、编码格式 # echo "附加信息:短信中心=$SMS_CENTER | 编码=$SMS_ENCODING" >> "$LOG_FILE"
别忘了给脚本添加可执行权限:
chmod +x /path/to/your/sms-logger.sh
第三步:验证功能是否正常
给你的设备发一条测试短信,然后查看日志文件:
cat /var/log/gammu-received-sms.log
如果能看到类似[2024-05-20 15:40:00] 发件人:+123456789 | 内容:测试短信日志的记录,就说明成功了~
常见问题排查
- 如果日志没内容,先看
gammu-smsd的系统日志(比如journalctl -u gammu-smsd或者/var/log/syslog),排查脚本执行失败的原因 - 确保
gammu-smsd运行的用户(通常是gammu或root)有脚本的执行权限和日志文件的写入权限 - 如果用Python脚本,访问环境变量的方式是
os.environ.get('SMS_NUMBER'),原理完全一致
内容的提问来源于stack exchange,提问作者lucian
相关产品推荐
相关产品推荐

