Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

Where and how should I set LD_LIBRARY_PATH to be visible by apache?

I tried to add following code to .bash_profile:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/folder_with_library/
export LD_LIBRARY_PATH

I restart apache but in phpinfo() i still see errors, so libraries hasn't been loaded.
It was working for command: echo $LD_LIBRARY_PATH.

Any help how to set this path?

I need to set that on VPS server - os is linux red-hat.

/etc/init.d/httpd file content:

    #!/bin/bash
    #
    # Startup script for the Apache Web Server
    #
    # chkconfig: - 85 15
    # description: Apache is a World Wide Web server.  It is used to serve \
    #          HTML files and CGI.
    # processname: httpd
    # pidfile: /var/run/httpd.pid
    # config: /etc/httpd/conf/access.conf
    # config: /etc/httpd/conf/httpd.conf
    # config: /etc/httpd/conf/srm.conf

    ulimit -HSn 32768

    # Source function library.
    . /etc/rc.d/init.d/functions

    # This will prevent initlog from swallowing up a pass-phrase prompt if
    # mod_ssl needs a pass-phrase from the user.
    INITLOG_ARGS=""

    # Path to the apachectl script, server binary, and short-form for messages.
    apachectl=/usr/sbin/apachectl
    httpd=/usr/sbin/httpd
    prog=httpd
    RETVAL=0

    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/etc/domeny:/etc/local/bin:.:$PATH
    ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin LC_MESSAGES=en_US"

    #LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/sql_anywhere/
    #export LD_LIBRARY_PATH

    # check for 1.3 configuration
    check13 () {
        CONFFILE=/etc/httpd/conf/httpd.conf
        GONE="(ServerType|BindAddress|Port|AddModule|ClearModuleList|"
        GONE="${GONE}AgentLog|RefererLog|RefererIgnore|FancyIndexing|"
        GONE="${GONE}AccessConfig|ResourceConfig)"
        if grep -Eiq "^[[:space:]]*($GONE)" $CONFFILE; then
            echo
            echo 1>&2 " Apache 1.3 configuration directives found"
            echo 1>&2 " please read @docdir@/migration.html"
            failure "Apache 1.3 config directives test"
            echo
            exit 1
        fi
    }



    # The semantics of these two functions differ from the way apachectl does
    # things -- attempting to start while running is a failure, and shutdown
    # when not running is also a failure.  So we just do it the way init scripts
    # are expected to behave here.
    start() {
                    echo -n $"Starting $prog: "
        check13 || exit 1
                    $ENV $httpd -k start -DSSL
                    RETVAL=$?
                    echo
                    [ $RETVAL = 0 ] && touch /var/lock/subsys/httpd
                    return $RETVAL
    }
    stop() {
        echo -n $"Stopping $prog: "
        killproc $httpd
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/httpd /var/run/httpd.pid
    }
    waitforexit() {
        count=${2:-30}
        while [ 0$count -gt 0 ]
        do
            PIDS=`ps -C$prog --no-heading e | grep $httpd` || break
            PIDS=`echo "$PIDS" | awk '{print $1}' | tr '\n' ' '`
            echo Remaining processes: $PIDS
            stop
            sleep 2
            count=`expr $count - 1`
        done
        if [ 0$count -eq 0 ];
        then
            echo Remaining processes: $PIDS
            return 1
        fi
        return 0
    }


    reload() {
        echo -n $"Reloading $prog: "
        check13 || exit 1
        killproc $httpd -HUP
        RETVAL=$?
        echo
    }

    # See how we were called.
    case "$1" in
        start)
        start
        ;;
        stop)
        stop
        ;;
        status)
                    status $httpd
        RETVAL=$?
        ;;
        restart)
        stop
        waitforexit "httpd" 20
        start
        ;;
        condrestart)
        if [ -f /var/run/httpd.pid ] ; then
            stop
            start
        fi
        ;;
        reload)
                    reload
        ;;
        graceful|help|configtest|fullstatus)
        $apachectl $@
        RETVAL=$?
        ;;
        *)
        echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
        exit 1
    esac

    exit $RETVAL
share|improve this question
    
That's a non-standard httpd init script for CentOS. Where did you get it? quanta's answer is correct for the standard CentOS init script. –  cjc Sep 6 '12 at 16:34
    
in /etc/init.d/httpd –  miszczu Sep 6 '12 at 16:38
    
Actually, more specifically, how did you install Apache? –  cjc Sep 6 '12 at 16:38
    
sorry, I didnt know what did you mean by that. It was already there, it's VPS server. –  miszczu Sep 6 '12 at 16:42
    
Looking at these comments, is this question really about Apache? Should it be re-tagged? –  pjmorse Sep 20 '12 at 14:03

1 Answer 1

up vote 3 down vote accepted

Since the init script include the following:

if [ -f /etc/sysconfig/httpd ]; then
        . /etc/sysconfig/httpd
fi

You can set it in /etc/sysconfig/httpd:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/folder_with_library/
export LD_LIBRARY_PATH

UPDATE Thu Sep 6 23:27:06 ICT 2012

Change the ENV line to:

ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin LC_MESSAGES=en_US LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/sql_anywhere/"

and try again.


UPDATE Fri Sep 7 00:14:11 ICT 2012

Add the following to the init script (underneath the # Source function library. line) to see what happens:

# Source SQL Anywhere
. /path/to/the/sa_config.sh
share|improve this answer
    
Sorry, but i'm not too good in that. When you wrote init script, what file would it be? Also I haven't got file /etc/sysconfig/httpd, but I've got /etc/init.d/httpd - is it the same file but in different location (different serv. spec.?). Please please HELP. –  miszczu Sep 6 '12 at 16:12
    
The init script is /etc/init.d/httpd. You can also set it in the start() function. Append the content of this file to your original post. –  quanta Sep 6 '12 at 16:15
    
as you can see I tryied to add this LD_.._PATH but it didnt work after restarting apache, so I've change it to comment –  miszczu Sep 6 '12 at 16:27
    
Updated my question. Append it to the ENV line, then restart Apache and try again. –  quanta Sep 6 '12 at 16:38
    
This is I've got in phpinfo(): LD_LIBRARY_PATH :/usr/lib/sql_anywhere/, but still have error: SQLAnywhere client version The SQLAnywhere client libraries could not be loaded. Please ensure that libdbcapi.so can be found in your LD_LIBRARY_PATH environment variable.. Does it mean I upload wrong libraries? File exist in location I set. –  miszczu Sep 6 '12 at 16:48

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.