温馨提示×

Ubuntu lsnrctl如何实现自动化运维

小樊
38
2025-11-17 11:59:30
栏目: 智能运维

Ubuntu 上 lsnrctl 自动化运维实践

一 基础准备与多监听器管理

  • oracle 用户执行,确保环境变量正确:设置 ORACLE_HOMEPATH,必要时设置 LD_LIBRARY_PATH,例如:export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1; export PATH=$ORACLE_HOME/bin:$PATH。lsnrctl 是 Oracle 监听器工具,并非通用系统服务管理工具,操作需具备相应权限。
  • 管理多个监听器:使用 lsnrctl 对指定监听器执行操作,如 lsnrctl start|stop|status [listener_name];配置文件为 $ORACLE_HOME/network/admin/listener.ora,变更后用 lsnrctl stop/start 使生效;日志位于 $ORACLE_HOME/network/log/listener.log,可用 tail -f 实时查看。

二 脚本封装与日志审计

  • 将常用操作封装为脚本,统一日志、错误处理与返回码,便于 systemd/cron/Ansible 调用。示例要点:定义 LOG_FILE;函数 start/stop/status/restart;在 status 中解析输出,非 READY 状态返回非 0;支持传参 listener_name。
  • 最小可用示例(可按需扩展):
    #!/bin/bash export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH LISTENER=${1:-LISTENER} LOG_FILE=/var/log/lsnrctl-wrapper.log log(){ echo “$(date ‘+%F %T’) [$LISTENER] $*” | tee -a “$LOG_FILE”; }

case “$2” in start) log “Starting…”; lsnrctl start “$LISTENER” ;; stop) log “Stopping…”; lsnrctl stop “$LISTENER” ;; status) log “Checking…”; lsnrctl status “$LISTENER” grep -q “READY” “$LOG_FILE” && exit 0 || exit 1 ;; restart) $0 “$LISTENER” stop; $0 “$LISTENER” start ;; *) echo “Usage: $0 <listener_name> {start|stop|status|restart}”; exit 2 ;; esac

三 系统级集成与开机自启

  • 使用 systemd 托管(推荐):创建 /etc/systemd/system/oracle-listener.service,示例要点:Description;After=network.target;Type=forking;ExecStart=/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl start;ExecStop=/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl stop;User=oracle;Group=oracle;Restart=on-failure;WantedBy=multi-user.target。执行 systemctl daemon-reload && systemctl enable --now oracle-listener。
  • 兼容旧系统(init.d):创建 /etc/init.d/oracle-listener,使用 su - oracle -c “$LSNRCTL start” 等方式封装启停;chmod +x 后 update-rc.d oracle-listener defaults。
  • 说明:部分环境将 Type 设为 simple 也可工作,但使用 lsnrctl 原生命令时,采用 Type=forking 更贴近其运行特性。

四 定时巡检 告警与批量编排

  • 定时巡检与自愈:在 oracle 用户 crontab 中加入,如 0 * * * * /opt/scripts/lsnrctl-wrapper.sh LISTENER status || /opt/scripts/lsnrctl-wrapper.sh LISTENER start,输出重定向至日志;结合阈值与重试次数避免抖动。
  • 监控与告警:用 Monit/Nagios/Zabbix 定期执行脚本,依据返回码与关键字(如 READY)判定状态并触发告警/恢复动作。
  • 批量编排:使用 Ansible 统一管理多台主机监听器,Playbook 中调用封装脚本的 start/stop/status/restart,集中记录与回滚。
  • CI/CD 联动:在 Jenkins Pipeline 前后执行检查脚本,部署后再次校验监听器状态,异常时阻断发布或自动回滚。

五 生产实践与风险控制

  • 变更流程:修改 listener.ora 后优先使用 lsnrctl reload 让配置生效;必要时再重启。
  • 日志与审计:统一落盘到 /var/log/,为脚本与 systemd 配置合适的日志轮转(如 logrotate)。
  • 权限与环境:始终以 oracle 用户运行;在脚本中显式设置 ORACLE_HOME/PATH/LD_LIBRARY_PATH,避免依赖交互式环境。
  • 幂等与容错:status 判定需明确(如检测 READY),失败可有限次数重试;自愈动作要记录审计信息。
  • 版本与路径:示例路径为 /u01/app/oracle/product/19.0.0/dbhome_1,请按实际环境替换;多监听器场景务必在脚本参数中显式指定 listener_name

0