You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:41:53