一 脚本
#!/bin/bash
# 定义要监控的进程关键字数组
process_keywords=("nginx" "tomcat" "redis" "hadoop" "mysql" "docker")
webhook_url="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx" # 替换为你的企业微信 webhook 地址
log_file="/var/log/process_monitor.log" # 定义日志文件路径
# 遍历进程关键字数组
for keyword in "${process_keywords[@]}"; do
pid=$(ps -ef | grep "$keyword" | grep -v grep | awk '{print $2}')
timestamp=$(date +"%Y-%m-%d %H:%M:%S") # 获取当前时间戳
echo "$timestamp - PID for $keyword is: $pid" >> "$log_file"
if [ -z "$pid" ]; then
message_content="$keyword 进程已停止!" # 为每个进程生成不同的消息内容
echo "$timestamp - Process '$keyword' not found." >> "$log_file"
curl -s "$webhook_url" \
-H 'Content-Type: application/json' \
-d "{
\"msgtype\": \"text\",
\"text\": {
\"content\": \"$message_content\",
\"mentioned_list\": [\"@all\"]
}
}"
else
echo "$timestamp - Process '$keyword' is running (PID: $pid)." >> "$log_file"
# 获取进程的详细信息
process_info=$(ps -ef | grep "$keyword" | grep -v grep)
# 构造要发送到微信的消息
message_content="$keyword 进程正在运行,详细信息:\n\`\`\`\n$process_info\n\`\`\`"
# 发送微信通知
curl -s "$webhook_url" \
-H 'Content-Type: application/json' \
-d "{
\"msgtype\": \"text\",
\"text\": {
\"content\": \"$message_content\",
\"mentioned_list\": [\"@all\"]
}
}"
echo "$timestamp - Process '$keyword' details:\n$process_info" >> "$log_file"
fi
done
修改说明:
- 定义日志文件路径:
- 使用
log_file="/var/log/process_monitor.log"
定义日志文件路径。你可以根据需要修改路径。
- 使用
- 获取时间戳:
- 使用
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
获取当前时间戳,以便在日志中记录时间。
- 使用
- 写入日志文件:
- 在
echo
命令中使用>> "$log_file"
将输出追加到日志文件中。 - 在进程正常运行和停止时,都将相关信息写入日志文件。
- 在进程正常运行时,将进程的详细信息也写入日志文件。
- 在
如何使用:
- 替换 webhook 地址:
- 将
webhook_url
变量替换为你的企业微信机器人的实际 webhook 地址。
- 将
- 修改进程关键字数组:
- 根据需要修改
process_keywords
数组,添加或删除要监控的进程关键字。
- 根据需要修改
- 修改日志文件路径(可选):
- 根据需要修改
log_file
变量,更改日志文件路径。
- 根据需要修改
- 运行脚本:
- 保存脚本并运行,它将依次监控数组中的每个进程,并将运行状态和详细信息写入日志文件。
日志文件示例:
2023-10-27 10:00:00 - PID for nginx is: 1234
2023-10-27 10:00:00 - Process 'nginx' is running (PID: 1234).
2023-10-27 10:00:00 - Process 'nginx' details:
root 1234 1 0 10:00 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon off;
nobody 1235 1234 0 10:00 ? 00:00:00 nginx: worker process
...
2023-10-27 10:01:00 - PID for tomcat is:
2023-10-27 10:01:00 - Process 'tomcat' not found.
...
通过这个修改,你可以将所有进程的运行状态和详细信息都记录到日志文件中,方便你进行查看和分析。
二 脚本运行前准备
转换格式
dos2unix ps1.sh
赋予权限
chmod +x ps1.sh
三 修改为定时任务
好为了将你的进程监控脚本设置为定时任务,你需要使用 cron
工具。cron
是 Linux/Unix 系统中用于定时执行任务的工具。
[root@mysql-master opt]# crontab -u root -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@mysql-master opt]# crontab -u root -l
*/5 * * * * /opt/ps1.sh
在里面添加这个消息发送时间
*/5 * * * * /opt/ps1.sh