IT/DevOps

[linux] linux start, stop shell template

알 수 없는 사용자 2023. 12. 30. 17:49
반응형

목차

    start.sh

    jboss service를 구동하는 쉘 예시다.

    서비스 구동 시 vm 옵션을 전달해서 백그라운드로 실행하고(표준 출력, 에러 무시) pid를 파일로 저장한다.(kill할 때 사용)

    #!/bin/sh
    
    #vm 옵션
    JAVA_OPTS="-Dglobals.profiles.active=dev"
    
    echo "jboss start."
    
    #jboss start
    nohup ./standalone.sh $JAVA_OPTS 1>/dev/null 2>&1 &
    
    #pid 저장
    echo $! > admin.pid
    #로그 출력
    tail -f ../standalone/log/server.log

    stop.sh

    프로세스 실행 시 만든 admin.pid파일에서 pid를 찾아서 kill한 뒤 pid 파일을 삭제한다.

    #!/bin/sh
    
    kill $(cat /경로/admin.pid) #start.sh 시작시 생성하는 pid파일
    echo "killed!"
    rm -rf /경로/admin.pid

    start_custom.sh

    jboss 실행 시 -Djboss.server.base.dir 옵션을 주니 pid가 2개가 생겨서 마지막에 생성된 pid를 찾아서 죽여야 했다.(단독 인스턴스를 2개 만들어야 해서 저렇게 했다.)

    #!/bin/sh
    
    #vm 옵션
    JAVA_OPTS="-Dglobals.profiles.active=dev"
    
    echo "admin start."
    #jboss start(vm 옵션 전달, 표준 출력, 에러 무시)
    nohup ./standalone.sh -Djboss.server.base.dir=/home/dev1/app/jboss-eap-7.4/standalone $JAVA_OPTS 1>/dev/null 2>&1 &
    
    # 프로세스가 올라가는 동안 pid를 찾아서 pid를 찾으면 파일로 저장 후 반복문 종료
    while true; do
      #pid 찾는다.
      if ps aux | grep "java" | grep -v grep | grep "standalone" > /dev/null; then
        #마지막 pid를 변수에 치환 
        latest_pid=$(ps aux | grep "java" | grep -v grep | awk '{print $2}' | sort -n | tail -n 1)
        #pid 파일로 저장
        echo $latest_pid > admin_pid.txt
        break
      fi
      # 1초 대기 후 재시도
      sleep 1
    done
    
    #로그 출력
    tail -f ../standalone/log/server.log

    개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.

    틀린 점 있을 경우 댓글 부탁드립니다.

    반응형