本文目录导读:

是的,完全可以,监控指定进程并在其崩溃或异常退出时自动重启,是运维中非常常见的需求,下面我给你提供几个实用脚本,覆盖 Linux 和 Windows 环境,并给出代码示例与使用说明。
Linux 环境(推荐使用 Shell 脚本)
基础版:循环检查 + 重启
#!/bin/bash
# 要监控的进程名(可以是命令名或完整路径的一部分)
PROCESS_NAME="nginx"
# 重启命令(根据实际情况修改)
RESTART_CMD="systemctl restart nginx"
while true; do
# 使用 pgrep 检查进程是否存在(-x 表示精确匹配进程名)
if ! pgrep -x "$PROCESS_NAME" > /dev/null 2>&1; then
echo "[$(date)] 进程 $PROCESS_NAME 未运行,正在执行重启..."
$RESTART_CMD
echo "[$(date)] 重启命令已执行"
else
echo "[$(date)] 进程 $PROCESS_NAME 运行正常"
fi
# 每隔 5 秒检查一次
sleep 5
done
使用方法:
- 将脚本保存为
monitor.sh - 赋予执行权限:
chmod +x monitor.sh - 后台运行:
nohup ./monitor.sh &或使用screen/tmux
进阶版:使用 systemd 自动重启(推荐,无需写脚本)
如果进程是 systemd 管理的服务,可以配置 Restart=always:
[Service] ExecStart=/usr/bin/your_program Restart=always RestartSec=3
systemctl enable your_service 即可,这是最稳妥的方式。
Windows 环境(使用 PowerShell 脚本)
监控并重启指定进程
# 要监控的进程名(不带 .exe 后缀)
$ProcessName = "notepad"
# 进程对应的可执行文件完整路径(用于重启)
$ExePath = "C:\Windows\System32\notepad.exe"
while ($true) {
$processes = Get-Process -Name $ProcessName -ErrorAction SilentlyContinue
if ($processes.Count -eq 0) {
Write-Host "[$(Get-Date)] 进程 $ProcessName 未运行,正在重启..."
Start-Process -FilePath $ExePath
Write-Host "[$(Get-Date)] 重启命令已执行"
} else {
Write-Host "[$(Get-Date)] 进程 $ProcessName 运行正常"
}
Start-Sleep -Seconds 5
}
使用方法:
- 保存为
.ps1文件(monitor.ps1) - 以管理员身份打开 PowerShell
- 执行:
.\monitor.ps1
更健壮的脚本(Linux,支持日志)
#!/bin/bash
PROCESS_NAME="your_app"
RESTART_CMD="/path/to/your_app"
LOG_FILE="/var/log/process_monitor.log"
while true; do
if ! pgrep -x "$PROCESS_NAME" > /dev/null; then
echo "$(date '+%Y-%m-%d %H:%M:%S') 进程 $PROCESS_NAME 崩溃,正在重启..." >> "$LOG_FILE"
# 如果重启失败,可以添加重试逻辑
$RESTART_CMD &
sleep 2
if pgrep -x "$PROCESS_NAME" > /dev/null; then
echo "$(date '+%Y-%m-%d %H:%M:%S') 重启成功" >> "$LOG_FILE"
else
echo "$(date '+%Y-%m-%d %H:%M:%S') 重启失败,可能需要人工干预" >> "$LOG_FILE"
fi
fi
sleep 5
done
使用更专业的工具(无需自己写脚本)
| 工具 | 适用平台 | 特点 |
|---|---|---|
| Supervisor | Linux | 成熟的进程管理工具,支持自动重启、日志、Web管理 |
| PM2 | Node.js 项目 | 自动重启、负载均衡、集群模式 |
| systemd | Linux | 系统自带,最稳定,配置简单 |
| NSSM | Windows | 将普通程序注册为 Windows 服务,自动重启 |
Supervisor 配置示例(Linux)
[program:myapp] command=/path/to/your_app autorestart=true startretries=3 stderr_logfile=/var/log/myapp.err.log stdout_logfile=/var/log/myapp.out.log
supervisorctl start myapp 即可。
NSSM 使用示例(Windows)
nssm install MyService "C:\path\to\your_app.exe" nssm set MyService AppRestartDelay 5000 nssm start MyService
注意事项与优化建议
- 进程名匹配问题:
pgrep -x要求精确匹配,如果进程名有多个实例,可以去掉-x或使用pgrep -f(模糊匹配,按命令行) - 避免重复重启:可以增加重启次数限制,1 分钟内最多重启 3 次,防止进程“刚启动又崩溃”导致无限循环
- 资源占用:检查间隔建议 5~30 秒,太短可能浪费 CPU
- 日志记录:务必记录重启事件,方便排查问题
- 守护进程:如果监控脚本本身挂掉了怎么办?可以用
cron(Linux)或Task Scheduler(Windows)定时检查监控脚本是否存活
如果你愿意告诉我具体是什么进程(Python 脚本、Java 应用、自定义二进制文件),以及你的操作系统版本,我可以帮你进一步定制更精确的脚本。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播