如何获取Perforce中60天未访问用户列表并配置定时邮件告警脚本
Perforce 超60天未访问用户自动监控告警实现
核心实现逻辑
基于p4 users命令做筛选优化,脚本内置Perforce连接环境变量适配cron无交互运行场景,自动比对用户最后访问Unix时间戳,筛选出超过指定天数未访问的用户后自动触发邮件告警,可直接配置定时任务每日运行。
可直接部署的Shell脚本
将以下内容保存为p4_inactive_user_monitor.sh,根据实际环境修改开头配置参数即可:
#!/bin/bash ########################## 配置项 ########################## # Perforce连接配置 P4_BIN="/usr/local/bin/p4" # 执行`which p4`可获取本机实际安装路径 P4PORT="ssl:your-p4-server:1666" P4USER="p4_monitor_account" # 用于查询的P4账号,需具备全量用户列表查询权限 P4PASSWD="your_monitor_account_password" # 告警配置 ALERT_RECEIVER="p4-admin@yourcompany.com,dev-ops@yourcompany.com" MAIL_SENDER="p4-alert@yourcompany.com" INACTIVE_DAYS=60 # 未访问天数阈值 LOG_PATH="/var/log/p4_inactive_monitor.log" ########################################################### # 初始化运行环境 export P4PORT P4USER P4PASSWD CURRENT_RUN_TIME=$(date "+%Y-%m-%d %H:%M:%S") echo "[$CURRENT_RUN_TIME] 未活跃用户检测任务启动" >> $LOG_PATH # 计算时间阈值(Linux GNU date写法,macOS/BSD系统请替换为 THRESHOLD_TS=$(date -v-${INACTIVE_DAYS}d +%s)) THRESHOLD_TS=$(date -d "${INACTIVE_DAYS} days ago" +%s) # 查询并筛选符合条件的用户,输出格式:用户名,邮箱,最后访问时间 INACTIVE_USER_LIST=$($P4_BIN -ztag -F "%User% %Email% %Access%" users | \ awk -v threshold=$THRESHOLD_TS ' $3 < threshold { format_access_time = strftime("%Y/%m/%d %H:%M:%S", $3) printf "%s,%s,%s\n", $1, $2, format_access_time }' | sort -t',' -k3) # 检测到未活跃用户时发送告警邮件 if [ -n "$INACTIVE_USER_LIST" ]; then INACTIVE_USER_COUNT=$(echo "$INACTIVE_USER_LIST" | wc -l) echo "检测到${INACTIVE_USER_COUNT}个超过${INACTIVE_DAYS}天未访问的账号,准备发送告警邮件" >> $LOG_PATH # 构造邮件正文 MAIL_BODY="Perforce平台未活跃账号告警 告警阈值:连续${INACTIVE_DAYS}天未访问平台 统计时间:${CURRENT_RUN_TIME} 未活跃账号总数:${INACTIVE_USER_COUNT} 用户名,绑定邮箱,最后访问时间 ${INACTIVE_USER_LIST} —— 本邮件由P4自动监控脚本发送,请勿直接回复" # 发送邮件(需提前配置服务器mailx/postfix邮件发送服务) echo "$MAIL_BODY" | mail -s "[P4告警] 检测到${INACTIVE_USER_COUNT}个长期未访问账号" \ -r $MAIL_SENDER $ALERT_RECEIVER if [ $? -eq 0 ]; then echo "告警邮件发送成功" >> $LOG_PATH else echo "告警邮件发送失败,请检查邮件服务配置" >> $LOG_PATH fi else echo "未检测到超过${INACTIVE_DAYS}天未访问的账号,跳过告警发送" >> $LOG_PATH fi echo "[$CURRENT_RUN_TIME] 检测任务执行结束" >> $LOG_PATH echo "----------------------------------------" >> $LOG_PATH
部署操作
- 给脚本添加可执行权限:
chmod +x /your/script/path/p4_inactive_user_monitor.sh - 手动执行一次脚本,查看日志文件输出,验证筛选结果、邮件发送功能正常
- 配置cron定时规则,执行
crontab -e添加以下内容,实现每日凌晨2点自动运行检测:
0 2 * * * /your/script/path/p4_inactive_user_monitor.sh
注意事项
- cron运行时不会加载用户交互式shell的环境变量,脚本中必须写死p4命令绝对路径、P4连接参数,避免出现命令找不到、连接失败的问题
- 建议使用专门的P4服务账号运行监控脚本,不要绑定个人账号,避免人员变动、个人密码轮换导致脚本失效
- 若不想在脚本中明文存储P4账号密码,可提前为运行脚本的系统用户执行
p4 login生成长期有效登录凭证,脚本中删除P4PASSWD配置项即可 - 服务器需提前配置mailx、postfix等邮件发送组件,确保可以正常向外投递邮件
- 若运行环境为macOS、FreeBSD等BSD类系统,将脚本中计算时间阈值的命令替换为BSD版本date写法即可
内容的提问来源于stack exchange,提问作者Manu Mishra
相关产品推荐
相关产品推荐

