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

如何获取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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:09:24