INSTANCES=$(find $BASE_DIR -maxdepth 1 -mindepth 1 -type d -exec basename {} \;)
마스터의 명령어는 $BASE_DIR
에서 최상위 수준의 디렉토리들만을 찾아내고, 각 디렉토리의 기본 이름(즉, 전체 경로 없이 디렉토리 이름만)을 반환하는 방식으로 작동합니다. 이 명령어는 Bash 스크립트 내에서 인스턴스 디렉토리 목록을 동적으로 생성할 때 유용합니다.
여기서:
find $BASE_DIR
는$BASE_DIR
디렉토리 내에서 검색을 시작합니다.-maxdepth 1
은 검색을 최상위 디렉토리에서만 수행하고 하위 디렉토리로는 내려가지 않게 합니다.-mindepth 1
은 최상위 디렉토리 자체는 결과에서 제외하고 그 바로 아래 있는 디렉토리부터 결과에 포함시킵니다.-type d
는 검색 대상이 디렉토리임을 지정합니다.-exec basename {} \;
는 검색된 각 디렉토리에 대해basename
명령을 실행하여 전체 경로 대신 디렉토리의 기본 이름만을 추출합니다. 여기서{}
는find
명령에 의해 찾아진 각 항목을 대체하고,\;
는-exec
옵션의 끝을 나타냅니다.
이 명령어를 사용하면 $BASE_DIR
내에 위치한 각 인스턴스 디렉토리의 이름이 공백으로 구분되어 INSTANCES
변수에 저장됩니다. 이후에 이 변수를 반복문에서 사용하여 각 인스턴스에 대한 작업을 수행할 수 있습니다.
예를 들어, 인스턴스 디렉토리들이 /home/apache/tomcat/instance
에 위치하고 adv
, bdm
, cms
등과 같은 이름을 가지고 있다면, 이 명령어는 adv bdm cms
등의 문자열을 INSTANCES
변수에 저장합니다. 이후 스크립트 내의 반복문에서 이 변수를 이용하여 각 인스턴스에 대한 작업을 순차적으로 수행할 수 있습니다.
#!/bin/bash # Tomcat의 설치 경로 설정 CATALINA_HOME=/home/apache/tomcat # 인스턴스들이 위치한 경로 설정 BASE_DIR=/home/apache/tomcat/instance # 인스턴스 목록을 자동으로 찾아내기 INSTANCES=$(find $BASE_DIR -maxdepth 1 -mindepth 1 -type d -exec basename {} \;) for instance in $INSTANCES do echo "Starting $instance..." export CATALINA_HOME=$CATALINA_HOME export CATALINA_BASE="$BASE_DIR/$instance" $CATALINA_HOME/bin/catalina.sh start done echo "All instances have been started."
#!/bin/bash # Tomcat의 설치 경로 설정 CATALINA_HOME=/home/apache/tomcat # 인스턴스들이 위치한 경로 설정 BASE_DIR=/home/apache/tomcat/instance # 인스턴스 목록을 자동으로 찾아내기 INSTANCES=$(find $BASE_DIR -maxdepth 1 -mindepth 1 -type d -exec basename {} \;) for instance in $INSTANCES do echo "Restarting $instance..." export CATALINA_HOME=$CATALINA_HOME export CATALINA_BASE="$BASE_DIR/$instance" # 인스턴스 종료 $CATALINA_HOME/bin/catalina.sh stop # 잠시 대기 (인스턴스가 완전히 종료되도록) sleep 10 # 인스턴스 시작 $CATALINA_HOME/bin/catalina.sh start done echo "All instances have been restarted."
#!/bin/bash # Tomcat의 설치 경로 설정 CATALINA_HOME=/home/apache/tomcat # 인스턴스들이 위치한 경로 설정 BASE_DIR=/home/apache/tomcat/instance # 인스턴스 목록을 자동으로 찾아내기 INSTANCES=$(find $BASE_DIR -maxdepth 1 -mindepth 1 -type d -exec basename {} \;) for instance in $INSTANCES do echo "Stopping $instance..." export CATALINA_HOME=$CATALINA_HOME export CATALINA_BASE="$BASE_DIR/$instance" # 인스턴스 종료 $CATALINA_HOME/bin/catalina.sh stop done echo "All instances have been stopped."
chmod +x script_name.sh ./script_name.sh