2012-03-31 3 views
1

EC2 인스턴스가 시작될 때 bash 스크립트를 실행하려고합니다. 서버를 시작할 때 GlassFish를 시작하면됩니다. 내가 실행하는 데 노력하고있어 명령은 다음과 같습니다 내가 수동으로 입력 할 때인스턴스 시작시 쉘 스크립트 실행

sudo /glassfish3/bin/asadmin start-domain 

작동합니다. 나는 행운을 가진 몇 곳에서이 명령을 추가하는 시도

: /etc/rc.d/rc의 끝에 /etc/rc.local에

  • 의 끝에

    • . 지역
    • 은으로 /etc/init.d/
    • 내가 모든 스크립트에게 777 권한을 준

    에 내 자신의 스크립트를 만들었습니다.

    누구나 내가 잘못하고있는 것에 대한 아이디어가 있습니까?

  • +2

    .bash_profile 당신이 당신의 로그를 확인 했습니까? 관심 없어? –

    +1

    (데비안 또는 우분투를 실행하는 경우 우연히, 수동으로하기보다는'update-rc.d' 명령을 사용하여 */etc/init.d, *에 스크립트를 설치하는 것이 가장 좋습니다.) – thb

    +0

    @jcomeau_ictx 정보는 어디에 기록됩니까? –

    답변

    4

    이상한 구성이 아닌 한 sudo은 실행할 때 인증을 원합니다. 일반적으로 대화식으로 실행됩니다. 스크립트가 /glassfish3/빈/및 asadmin루트가 소유하고 있다고 가정

    ,는 6755.에 해당 파일 권한을 설정할 수 있습니다 이것은 당신이 아마 할 sudo을 무엇을 의미하는지 않습니다. 물론 위험 할 수도 있고 보안상의 위험이 될 수도 있습니다.

    (@jcomeau_ictx은 바로, 우연히 그가 제안대로 로그를 확인해야합니다..) 보관의 이익을 위해

    업데이트 : 위의 대답은 다행히 영업 이익의 즉시 문제를 해결 한 것으로 보인다를, 그래서 우리는 ' 그걸 맡길거야. 그러나이 답변은 보관 된 상태로 유지되며 나중에 다른 사람이 볼 수 있으므로 더 추가해야합니다.

    하나 은 실행 파일의 파일 사용 권한을 6755로 변경하지만 항상 좋은 것은 아닙니다. 그러한 권한의 효과는 (a) 누구나 실행 파일의 소유자의 전체 권한으로 실행 파일을 실행할 수있게하는 것입니다. 때로는 이것은 정확히 원하는 것입니다. 그러나 OP의 경우에는 그러한 권한을 가진 /glassfish3/bin/asadmin이 풀 루트 권한을 가진 임의의 인수로 호출 될 수 있습니다. 그것이 당신이 원하는 것이 아니라면, 당신은 약간의 추가 치료를해야합니다.

    추가 치료 방법은 여러 가지가 있습니다. 하나는 다음과 같습니다.

    1. 파일 권한을 755
    2. 쓰기를 실행두고 작은 래퍼, 실행 파일을 실행 unistd.h execv()을 사용하는 프로그램을 컴파일합니다.
    3. 가능한 경우 래퍼에 인수를 허용하지 마십시오. 그렇지 않으면 인수가 제한적이고 융통성이 없어야합니다. 래퍼가 실행 파일에 전달 된 인수를 엄격하게 제어하게하십시오.
    4. 래퍼를 루트 (루트 :)로 소유하고 chown을 사용하여 사용자가없는 적절한 그룹에 할당하십시오.이 목적으로 새 그룹을 시작하는 것이 좋지만 시스템에서 /etc/group 파일을 검색하면 이미 적합한 그룹을 찾지 못할 수 있습니다. 참고로 시스템에 특수 목적 그룹에 이미 속해있는 명령을 ls -l /bin /usr/bin | grep -vE '^([^[:space:]]+[[:space:]]+){2}(root[[:space:]]+){2}' 등으로 나열 할 수 있습니다.
    5. 래퍼 파일 권한 6754를 지정하십시오. 따라서 해당 그룹을 제외하고는 실행할 수 없습니다.
    6. 는 호출 한 스크립트 파일 권한

    2755 호출하는 스크립트는 이미 그룹에 속하는 경우, 당신은 아마 전반에 걸쳐 같은 그룹을 사용할 수를 그룹에 호출하는 스크립트를 인정하고 제공합니다.

    기술의 여러 변형이 가능하며 위에 나열된 것과 정확히 일치하지는 않지만 chown 명령의 맨 페이지 및/또는 정보 항목을 읽고 파일 사용 권한의 세부 정보를 조금만 실험 해보면 보안 위험을 감수하지 않으면서도 효과가있는 솔루션을 만들 수 있습니다.

    +0

    권한을 6755로 변경하고 sudo를 삭제했습니다. 감사! –

    1

    대부분의 아마 그것은 JAVA_HOME 문제가 내 작업 init 스크립트는 여기에, sudo -i를 사용해보십시오입니다 :

    JAVA_HOME 및 PATH를 설정해야
    #!/bin/bash 
    # description: Glassfish Start Stop Restart 
    # processname: glassfish 
    # chkconfig: - 95 80 
    
    DOMAIN=domain555 
    
    GF_HOME=/opt/glassfish3 
    DOMAIN_DIR=/home/glassfish/domains 
    RUN_AS=glassfish 
    
    CMD_START="$GF_HOME/bin/asadmin start-domain --domaindir $DOMAIN_DIR" 
    CMD_STOP="$GF_HOME/bin/asadmin stop-domain --domaindir $DOMAIN_DIR" 
    
    function start() { 
        sudo -u $RUN_AS -i $CMD_START $DOMAIN 
    } 
    
    function stop() { 
        sudo -u $RUN_AS -i $CMD_STOP $DOMAIN 
    } 
    
    case $1 in 
    start) 
        start; 
    ;; 
    stop) 
        stop; 
    ;; 
    restart) 
        stop; 
        start; 
    ;; 
    esac 
    exit 0 
    

    사용자의 .bashrc 또는

    관련 문제