第三周作业一:编写一个Bash脚本,能够监控指定名称的进程(例如 nginx 或 sshd)。 如果进程存在,则输出其PID和状态信息 如果进程不存在,则自动尝试重启该进程(可假设进程

张开发
2026/5/21 19:43:00 15 分钟阅读
第三周作业一:编写一个Bash脚本,能够监控指定名称的进程(例如 nginx 或 sshd)。 如果进程存在,则输出其PID和状态信息 如果进程不存在,则自动尝试重启该进程(可假设进程
#!/bin/bash# 配置项可修改PROCESS_NAMEsshd # 要监控的进程名START_CMD/usr/sbin/sshd # 进程启动命令CHECK_INTERVAL5 # 检查间隔秒LOG_FILE/var/log/process_monitor.log # 日志路径# # 函数输出带时间戳的日志log() {echo [$(date %Y-%m-%d %H:%M:%S)] $1 $LOG_FILE}# 函数检查进程是否存在check_process() {# 使用 pgrep 查找进程-x 精确匹配名称PID$(pgrep -x $PROCESS_NAME)if [ -n $PID ]; then# 进程存在echo ✅ 进程 $PROCESS_NAME 正在运行PID: $PID# 输出详细状态ps aux | grep -v grep | grep $PROCESS_NAMEreturn 0else# 进程不存在echo ❌ 进程 $PROCESS_NAME 未运行return 1fi}# 主循环每隔5秒检查一次echo 启动进程监控 $PROCESS_NAME log 监控服务已启动检查间隔${CHECK_INTERVAL}秒while true; do# 条件判断调用函数检查进程if check_process; then: # 空命令进程正常不做操作elseecho 尝试自动重启 $PROCESS_NAME...log 进程异常执行重启命令$START_CMD# 后台启动进程$START_CMD # 等待1秒再次检查sleep 1if pgrep -x $PROCESS_NAME /dev/null; thenecho ✅ 重启成功log 进程重启成功elseecho ❌ 重启失败log 进程重启失败fifiecho ------------------------------------------------# 循环间隔sleep $CHECK_INTERVALdonechmod x process_monitor.shvim /etc/systemd/system/process-monitor.service[Unit]DescriptionProcess Monitor ServiceAfternetwork.target[Service]ExecStart/root/process_monitor.shRestartalwaysUserroot[Install]WantedBymulti-user.targetsystemctl daemon-reloadsystemctl enable process-monitorsystemctl start process-monitorsystemctl status process-monitor

更多文章