Debian lsnrctl如何自动化运维
导读:Debian 上 lsnrctl 自动化运维实践 一 基础准备与环境变量 确认 lsnrctl 可用:which lsnrctl 应返回路径,常见为 $ORACLE_HOME/bin/lsnrctl。 配置 Oracle 环境变量(写入...
Debian 上 lsnrctl 自动化运维实践
一 基础准备与环境变量
- 确认 lsnrctl 可用:which lsnrctl 应返回路径,常见为 $ORACLE_HOME/bin/lsnrctl。
- 配置 Oracle 环境变量(写入 ~/.bashrc 或系统 profile,执行 source 使其生效):
- export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
- export PATH=$ORACLE_HOME/bin:$PATH
- export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
- 监听器配置文件位于 $ORACLE_HOME/network/admin/listener.ora,修改后需重启监听器生效。
- 常用命令:lsnrctl start|stop|status;查看日志:tail -f $ORACLE_HOME/network/log/listener.log。
二 自动化方案总览
- 下表给出在 Debian 上常用的自动化手段与适用场景:
| 手段 | 主要用途 | 关键要点 |
|---|---|---|
| Shell 脚本封装 | 标准化启停、状态检查、日志落盘 | 统一入口、带时间戳日志、错误码返回 |
| systemd 服务 | 开机自启、故障自恢复、统一运维接口 | Type=forking、User=oracle、Restart=on-failure |
| Cron 定时任务 | 定时巡检、日报归档 | 重定向日志、避免并发、注意环境变量 |
| 监控与告警 | 异常即时通知 | 结合 monit/nagios 执行 lsnrctl status 并解析输出 |
| 配置与版本管理 | 变更可追溯、快速回滚 | Git 管理 listener.ora/tnsnames.ora 与脚本 |
| 远程批量 | 多实例统一运维 | SSH 批量执行脚本,配合密钥与 sudo 权限控制 |
三 落地示例
-
- 标准化管理脚本(支持 start/stop/restart/status,带日志与时间戳)
#!/usr/bin/env bash
# File: /usr/local/bin/manage_listener.sh
set -Eeuo pipefail
LISTENER="${
1:-LISTENER}
"
ORACLE_HOME="${
ORACLE_HOME:-/opt/oracle/product/19c/dbhome_1}
"
export ORACLE_HOME
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
LOG_DIR="/var/log/oracle"
LOG_FILE="$LOG_DIR/listener_${
LISTENER}
_$(date +%F).log"
mkdir -p "$LOG_DIR"
log() {
echo "$(date '+%F %T') [$LISTENER] $*" | tee -a "$LOG_FILE";
}
case "$1" in
start)
log "Starting listener..."
if lsnrctl start "$LISTENER";
then
log "Started."
exit 0
else
log "Start FAILED."
exit 2
fi
;
;
stop)
log "Stopping listener..."
if lsnrctl stop "$LISTENER";
then
log "Stopped."
exit 0
else
log "Stop FAILED."
exit 3
fi
;
;
restart)
"$0" stop
sleep 3
"$0" start
;
;
status)
log "Checking status..."
lsnrctl status "$LISTENER"
;
;
*)
echo "Usage: $0 {
start|stop|restart|status}
[listener_name]"
exit 1
;
;
esac
- 赋权与测试:chmod +x /usr/local/bin/manage_listener.sh;测试 ./manage_listener.sh status。
-
- systemd 服务(开机自启 + 故障自动重启)
# /etc/systemd/system/oracle-listener.service
[Unit]
Description=Oracle Listener
After=network.target
[Service]
Type=forking
User=oracle
ExecStart=/usr/local/bin/manage_listener.sh start
ExecStop=/usr/local/bin/manage_listener.sh stop
ExecReload=/usr/local/bin/manage_listener.sh restart
Restart=on-failure
RestartSec=10
TimeoutSec=300
[Install]
WantedBy=multi-user.target
- 启用与操作:
- systemctl daemon-reload
- systemctl enable --now oracle-listener.service
- systemctl status oracle-listener.service
-
- 定时巡检与告警归档(Cron)
# 每天 02:00 巡检并记录
0 2 * * * /usr/local/bin/manage_listener.sh status >
>
/var/log/oracle/listener_status_daily.log 2>
&
1
# 每 5 分钟探测,异常时简单邮件告警(需本地 MTA 或 mailx)
*/5 * * * * /usr/local/bin/manage_listener.sh status >
/tmp/lsn.out 2>
&
1 || \
echo "[$(date)] Listener $LISTENER DOWN" | mail -s "Listener DOWN on $(hostname)" ops@example.com
-
- 批量与监控集成
- Ansible 简单任务:
- name: Ensure listener is running
hosts: oracle_servers
become: yes
tasks:
- name: Start listener
command: /usr/local/bin/manage_listener.sh start
- name: Check listener
command: /usr/local/bin/manage_listener.sh status
register: out
- name: Show status
debug:
var: out.stdout_lines
- 监控建议:在 Nagios/Icinga/Monit 中周期性执行 lsnrctl status,依据输出中是否包含 “TNS-12541: TNS:no listener” 等关键字判定状态并触发告警。
四 维护与风险控制
- 变更前备份:对 listener.ora/tnsnames.ora 做版本化备份(Git 或 rsnapshot),变更后先在测试环境验证。
- 日志与诊断:常规巡检关注 $ORACLE_HOME/network/log/listener.log,异常时结合 lsnrctl status 的输出定位端口、服务注册与访问控制问题。
- 自恢复策略:生产环境建议启用 systemd 的 Restart=on-failure,并配合告警,避免“反复重启风暴”(必要时加入重启间隔与上限)。
- 安全与权限:以专用 oracle 用户运行,脚本与日志目录权限最小化;SSH 批量执行需使用密钥并限制 sudo 权限到必要命令。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian lsnrctl如何自动化运维
本文地址: https://pptw.com/jishu/750375.html
