麒麟系统需通过mailx配置smtp并编写systemd托管的watchdog脚本实现进程崩溃毫秒级邮件告警:先安装heirloom-mailx,配置/etc/mail.rc的smtp参数(含授权码),验证邮件通路;再创建每5秒轮询pgrep的shell脚本,崩溃时记录日志并发送邮件;最后以systemd服务开机自启并自动重启。

当麒麟系统中关键业务进程意外崩溃时,需立即获知并介入处理,避免服务长时间中断。直接依赖人工巡检日志效率低下,必须让系统在进程终止瞬间触发邮件告警。
确认系统具备邮件发送能力
若未配置SMTP,mail命令将静默失败,无法发出任何通知。先验证基础能力是否就绪。
执行ls -l $(which mail),确认输出指向/usr/bin/mailx;若显示/bin/mail或报错command not found,说明尚未安装heirloom-mailx。
执行sudo apt install heirloom-mailx -y(Debian系)或sudo yum install mailx -y(RHEL系)完成安装。
编辑/etc/mail.rc,追加SMTP配置(以163邮箱为例):
set from=alert@163.com
set smtp=smtp.163.com
set smtp-auth-user=alert@163.com
set smtp-auth-password=XXXXXX
set smtp-auth=login
【smtp-auth-password必须是邮箱后台生成的16位授权码,绝非登录密码;且保存后立即执行chmod 600 /etc/mail.rc,否则mailx拒绝读取】
运行echo "test" | mail -s "【Kylin测试】$(date +%H:%M)" your@email.com,收到邮件即表示通道可用。
编写崩溃检测与邮件触发脚本
不能依赖crontab轮询检查,必须由进程自身或其父shell捕获退出信号,实现毫秒级响应。
创建脚本/opt/bin/watchdog.sh,内容如下:
#!/bin/bash
APP_CMD="/opt/app/myserver"
LOG_FILE="/var/log/myserver/watchdog.log"
EMAIL="admin@company.com"
while true; do
if ! pgrep -f "$APP_CMD" > /dev/null; then
echo "$(date): Process $APP_CMD crashed" >> "$LOG_FILE"
echo "进程 $APP_CMD 在 $(date) 崩溃,PID已消失。请立即检查服务状态与日志。" | mail -s "【ALERT】myserver 崩溃" "$EMAIL"
break
fi
sleep 5
done
赋予执行权限:sudo chmod +x /opt/bin/watchdog.sh
该脚本每5秒检查一次目标进程是否存在,一旦发现pgrep无返回即判定崩溃,立刻记录时间戳并发送邮件——【注意:sleep 5不可改为1,高频轮询会显著增加CPU负载】
将监控脚本设为系统服务开机自启
仅手动运行脚本无法保障长期可靠,必须交由systemd托管,实现崩溃后自动重启监控、断电恢复后自动加载。
创建服务文件/etc/systemd/system/myserver-watchdog.service:
[Unit]
Description=MyServer Crash Watchdog
After=network.target
[Service]
Type=simple
User=root
ExecStart=/opt/bin/watchdog.sh
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
启用并启动服务:
第一步:sudo systemctl daemon-reload
第二步:sudo systemctl enable myserver-watchdog.service
第三步:sudo systemctl start myserver-watchdog.service
执行sudo systemctl status myserver-watchdog.service确认状态为active (running),且Loaded行显示enabled。











