Eu tenho um servidor RHEL 7.2 com o Oracle 11g Express Edition (11.2.0) instalado. A instalação do Oracle criou um arquivo chamado "oracle-xe" em /etc/init.d Esse é um script bash que pode ser usado para iniciar e parar o listener e o banco de dados manualmente. Quando estou conectado ao servidor, posso executar o seguinte:
dzdo /etc/init.d/oracle-xe start
e o banco de dados ouvinte + Oracle são iniciados sem problemas. Eu posso fazer logon usando o sqlplus e executar comandos. Estou tentando usar o chkconfig para fazer com que o oracle-xe seja executado automaticamente no início do sistema, para que eu não tenha que iniciar manualmente o listener e o banco de dados toda vez que o servidor for reinicializado. O próprio script oracle-xe é longo, mas a carne dele contém o seguinte:
#!/bin/bash
# chkconfig: 2345 80 05
# Source fuction library
if [ -f /lib/lsb/init-functions ]
then
. /lib/lsb/init-functions
elif [ -f /etc/init.d/functions ]
then
. /etc/init.d/functions
fi
SU=/bin/su
ORACLE_OWNER=oracle
$ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
LSNR=$ORACLE_HOME/bin/lsnrctl
SQLPLUS=$ORACLE_HOME/bin/sqlplus
$STARTUP_LOG=/home/tsm/log/oracle-xe.log
echo $(date) >> $STARTUP_LOG
$SU -s /bin/bash $ORACLE_OWNER -c "$LSNR start" >> $STARTUP_LOG 2>&1
$SU -s /bin/bash $ORACLE_OWNER -c "$SQLPLUS -s /nolog @$ORACLE_HOME/config/scripts/startdb.sql" >> $STARTUP_LOG 2>&1
Adicionei o código $ STARTUP_LOG e o > > redirecionamento de saída para que eu pudesse resolver o que estava acontecendo. Eu adicionei o script ao chckconfig com o seguinte:
cd /etc/init.d
dzdo chmod 750 oracle-xe
dzdo chkconfig --add oracle-xe
dzdo chkconfig oracle-xe on
O seguinte comando produz a saída dada (encurtada):
dzdo chkconfig --list
oracle-xe 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Eu reinicializo o servidor e ele gera um arquivo de log em /home/tsm/log/oracle-xe.log com a seguinte saída:
Fri Jan 13 15:03:58 CST 2017
su: cannot open session: Permission denied
su: cannot open session: Permission denied
e, como você pode imaginar, como resultado dessa falha de su, nem o ouvinte nem o mecanismo de banco de dados foram iniciados. Como vejo a data / hora da reinicialização no arquivo de log, sei com certeza que o script está sendo executado na inicialização. Parece-me ser um problema de permissões, que qualquer conta está sendo usada para executar scripts de inicialização na inicialização por algum motivo não pode su como $ ORACLE_OWNER, mas eu como um administrador humilde pode fazer isso muito bem a partir do prompt de comando. Entendi que o código do init é executado como root e, portanto, esse comando su deve ser executado sem problemas. Eu tenho procurado e tentando várias coisas durante a maior parte do dia tentando resolver isso, e tirei o pouco que restou do meu cabelo.
O próprio servidor está usando o DirectAuthorize para conceder permissões de acesso, e é por isso que acabo usando o dzdo em vez do sudo. Isso poderia ter algo a ver com isso?