Hi, I’m trying to define a script to query a database oracle (on python using cx_Oracle) with the director. When I run the command in terminal, it resolves fine but icinga web shows “
File “/usr/lib/nagios/plugins/./querydatabasebo.py”, line 85, in main() File “/usr/lib/nagios/plugins/./querydatabasebo.py”, line 69, in main rows=database(cfg) File "File “/usr/lib/nagios/plugins/./querydatabasebo.py”,
line 87, in main() File “/usr/lib/nagios/plugins/./querydatabasebo.py”,
line 71, in main rows=database(cfg) File “/usr/lib/nagios/plugins/./querydatabasebo.py”,
line 46, in database cx_Oracle.init_oracle_client(lib_dir=oracle_lib_dir) cx_Oracle.DatabaseError:
DPI-1047: Cannot locate a 64-bit Oracle Client library: “libnnz21.so: cannot open shared object file: No such file or directory”.
See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help”.
the script:
#!/usr/bin/env python3
import cx_Oracle
import sys
import getopt
import os
def get_cmdline_cfg():
opts, args = getopt.getopt(
sys.argv[1:],
"u:P:H:p:s:q:",
["user=","Password","Host=", "port=", "sid=","query="]
)
### Build cfg dictionary
cfg = {}
for o, a in opts:
if o in ("-u","--user"):
cfg["user"] = a
elif o in ("-P","--Password"):
cfg["Password"] = a
elif o in ("-H","--Host"):
cfg["Host"] = a
elif o in ("-p","--port"):
cfg["port"] = a
elif o in ("-s","--sid"):
cfg["sid"] = a
elif o in ("-q","--query"):
cfg["query"] = a
# These are required
for req_param in ("user","Password","Host", "port","sid"):
if req_param not in cfg:
print("Missing parameter: {0}",end=" ")
print("Unknow")
exit(3)
return cfg
def database(cfg):
#connect to database
oracle_lib_dir = '/opt/oracle/instantclient_21_9'
cx_Oracle.init_oracle_client(lib_dir=oracle_lib_dir)
os.environ['PATH'] = '/opt/oracle/instantclient_21_9:' + os.environ['PATH']
os.environ['LD_LIBRARY_PATH'] = '/opt/oracle/instantclient_21_9'
os.environ['ORACLE_HOME'] = '/opt/oracle/instantclient_21_9'
conex = cx_Oracle.makedsn(cfg['Host'],cfg['port'],cfg['sid'])
conn = cx_Oracle.connect(user=cfg['user'],password=cfg['Password'],dsn=conex)
#query to database
cur = conn.cursor()
cur.execute(cfg['query'])
rows=list(cur.fetchall()[0])[0]
#close to databse
conn.close()
return(rows)
def main():
cfg = get_cmdline_cfg()
rows=database(cfg)
#output
if rows == 0:
print("ok, ",end=" ")
status=0
else:
print("Critical, ",end=" ")
status=2
print(rows)
exit(status)
if name == ‘main’:
main()
and i have installed client oracle on /opt/oracle/instantclient_21_9/
what could it be?
thanks
- Icinga Web 2 version 2.11.1