2013-01-21 5 views
0

저는 루트 사용자이고 shell 스크립트에서 SQL 스크립트를 실행하는 것보다 Oracle을 사용하려는 사용자로 변경하려고합니다.사용자를 oracle로 변경하고 쉘 스크립트에서 sql을 실행하십시오.

#!/bin/sh 

portStatus=`lsof -ni:5060` 
if [ ${#portStatus} -ne 0 ] 
    then 
    sudo -u oracle << EOF 
    /oracle/product/102/db/bin/sqlplus -s a513s6p4/a513s6p4 @/oracle/product/102/db/GW_EP_List.sql; 
    EOF 
    else 
    exit 
fi 

다음과 같은 오류가 발생합니다.

./deneme2.sh: syntax error at line 12: `end of file' unexpected 

문제점이 무엇인지 알려 주실 수 있습니까?

감사합니다, 할리

답변

0
sudo -u oracle /oracle/product/102/db/bin/sqlplus -s a513s.......... 

당신은 여기에 EOF가 필요하지 않습니다. 위와 같이 sqlplus 명령을 실행하십시오. 이 경우 oracle 사용자는 sudo 명의 사용자 여야합니다.

oracle는 일반 사용자

su - oracle -c "/oracle/product/102/db/bin/sqlplus -s a513s.........." 

(남자 페이지에서) 조금 더 약 su 명령입니다 경우 : su 명령은 로그인 세션 동안 다른 사용자가 될하는 데 사용됩니다

에게. 사용자 이름없이 호출하면 su는 기본적으로 수퍼 유저가됩니다. 선택적 인수 - 사용자가 직접 로그인 한 상태에서 사용자가 예상하는 것과 유사한 환경을 제공하기 위해 사용될 수 있습니다. . 사용자 이름 다음에 추가 인수가 제공 될 수 있습니다.이 경우 사용자의 로그인 쉘에 이 제공됩니다. 특히 인수가 -c이면 대부분의 명령 인터프리터에서 다음 인수가 명령으로 처리됩니다. 이 명령은 대상 사용자에 대해/etc/passwd에 지정된 쉘에 의해 실행됩니다.

+0

를 시도? – Suku

+0

suku 님, sudo를 사용해 보았습니다. sudo를 사용해 주셔서 감사합니다. 그러나 작동 시키면 오라클을 실행할 때마다 나를 로깅하는 텍스트가 나옵니다. ( ' !/bin/ksh ..... su - oracle -c "/ oracle/product/102/db/bin/sqlplus -s a513s6p4/a513s6p4 @/oracle/product/102/db/GW_EP_List.sql"; .....' ---> 경고 : 권한이없는 사용자는 컴퓨터를 사용하지 마십시오 경고 : 경고 메시지가 표시됨 /etc/.profile-EIS .....' –

+0

I 스크립트에서'sudo' 대신'su' 명령을 사용한다는 것을 의미합니다. –

0

su을 사용할 수 있습니다. su -과 환경을 얻을 기억 :

COMMAND="/oracle/product/102/db/bin/sqlplus -s a51... " 
su - oracle -c $COMMAND 

좋은 샘플 oracle-base site, Automating Database Startup and Shutdown on Linux Post :

case "$1" in 
    'start') 
     # Start the Oracle databases: 
     # The following command assumes that the oracle login 
     # will not prompt the user for any values 
     su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start" 
     su - $ORA_OWNER -c $ORA_HOME/bin/dbstart 
     touch /var/lock/subsys/dbora 
     ;; 
+0

감사합니다. @danihp 감사합니다. –

1

여기에 사용하는 줄의 시작 부분에 있어야한다 닫는 문자열을 문서화!

당신은`스와 이소 sudo`에 의해 무엇을 의미
#!/bin/sh 

portStatus=`lsof -ni:5060` 
if [ ${#portStatus} -ne 0 ] 
    then 
    sudo -u oracle << EOF 
    /oracle/product/102/db/bin/sqlplus -s a513s6p4/a513s6p4 @/oracle/product/102/db/GW_EP_List.sql; 
EOF 
    else 
    exit 
fi 
관련 문제