Check oracle with director DPI-1-47

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

I solved it by reinstalling libaio1 and execution "sudo sh -c ‘echo /usr/lib/oracle/19.12/client64/lib/ > /etc/ld.so.conf.d/oracle.conf’ " and “sudo ldconfig”