안녕하세요 오늘은 자바 어플리케이션을 배포하기 위해 start.sh 을 사용하고 로그도 확인해 보겠습니다.
1. start.sh 만들기
리눅스에서 vi start.sh 명령어를 사용하여 start.sh을 만들어 봅시다.
해당 sh에 실행권한을 부여합니다.
명령어는 chmod +x start.sh 입니다.
이제 start.sh 을 작성해봅시다.
2. nohub 명령어 사용
nohub 이란 (no hang up) 즉 행업이 없이 계속 실행하겠다 라는 의미 입니다.
즉시 예제를 보며 설명하겠습니다.
#!/bin/bash
nohup /app/jdk/open-jdk-11.0.2/bin/java -DTESTAPP -server -Xms4g -Xmx4g -jar ../lib/test-app-0.1.0.jar --spring.config.location=file:../conf/application.yml >> ../logs/TESTAPP.log &
"#!/bin/bash"는 스크립트 파일의 첫 줄에 위치하는 특별한 주석입니다.
이 주석은 스크립트 파일을 실행할 때 사용할 인터프리터(해석기)를 지정하는 역할을 합니다.
해당 주석은 "해시뱅"이라고도 불리며, 스크립트 파일이 Bash(Bourne Again SHell) 인터프리터에서 실행되어야 함을 나타냅니다.
Bash는 대표적인 Unix/Linux 환경에서 사용되는 명령어 해석기로,
쉘 스크립트를 실행하는 데 사용됩니다.
이 주석을 통해 운영체제가 스크립트 파일을 올바른 방식으로 해석할 수 있도록 도와줍니다.
따라서, "#!/bin/bash" 주석은 스크립트 파일이 Bash 인터프리터에서 실행되어야 함을 나타내는 것입니다.
이 주석을 스크립트 파일의 첫 줄에 추가함으로써 스크립트를 정상적으로 실행할 수 있습니다.
또한 마지막에 & 도 꼭 적어야 합니다. 이는 백그라운드에서 실행하겠다는 의미로 nohub 과 세트입니당!
꼭 적어 주셔야 되요!
3. java 어플리케이션 실행
nohub 다음에는 자바 버전이 나오죠?? 사용하려는 버전의 자바 경로를 적어주세요
다음은 사용할 프로세스 이름입니다. 저는 TESTAPP이라고 네이밍 하였습니다.
그리고 자바 메모리를 설정합니다.
-Xms:
"-Xms" 옵션은 JVM이 시작될 때 할당되는 초기 힙 메모리 크기를 지정합니다.
예를 들어, "-Xms512m"은 JVM이 시작될 때 512MB의 힙 메모리를 할당하도록 설정합니다.
초기 힙 크기는 JVM이 실행되는 동안 사용되는 최소 메모리 양을 나타내며, JVM이 시작될 때 해당 크기의 메모리가 미리 할당됩니다.
-Xmx:
"-Xmx" 옵션은 JVM이 사용할 수 있는 최대 힙 메모리 크기를 지정합니다.
예를 들어, "-Xmx2g"는 JVM이 사용할 수 있는 최대 2GB의 힙 메모리를 지정합니다.
최대 힙 크기는 JVM이 사용할 수 있는 힙 메모리의 상한을 나타내며, 이 크기를 초과하는 메모리 요청은 OutOfMemoryError를 발생시킵니다.
마지막으로 실행될 jar와 외부 설정 파일을 지정하였습니다.
-jar ../lib/test-app-0.1.0.jar --spring.config.location=file:../conf/application.yml
자 이렇게 설정하고 ./start.sh 명령어를 사용해 보세요!
여러분의 어플리케이션이 백그라운드에서 실행되고
logs 폴더에서 log를 확인 할 수 있습니다. 또한 ps -ef 를 통해 process를 확인해보세요!!
4. 업그레이드된 로그관리
#!/bin/bash
nohup /app/jdk/open-jdk-11.0.2/bin/java -DTESTAPP -server -Xms4g -Xmx4g -jar ../lib/test-app-0.1.0.jar --spring.config.location=file:../conf/application.yml >/dev/null 2>&1 &
자 이번에는 로그쪽 명령어가 수정되었죠??
"/dev/null"과 "2>&1"은 리눅스나 유닉스 시스템에서 명령어 실행 시 출력을 관리하는 데 사용되는 특수한 옵션입니다.
"/dev/null":
"/dev/null"은 Null 장치라고도 불리는 가상의 디바이스 파일입니다.
이 파일은 모든 데이터를 버릴 수 있는 특성을 가지고 있습니다.
명령어나 프로세스의 출력을 "/dev/null"로 리다이렉트하면 출력이 폐기되므로 아무런 결과를 터미널에 표시하지 않습니다.
주로 불필요한 출력을 무시하거나 출력이 필요하지 않은 경우에 사용됩니다.
"2>&1":
"2>&1"은 표준 에러 출력(STDERR)을 표준 출력(STDOUT)으로 리다이렉트하는 역할을 합니다.
명령어 실행 시 발생하는 오류 메시지나 에러 출력을 표준 출력으로 병합하여 함께 처리하도록 합니다.
일반적으로 터미널에서 명령어를 실행하면 표준 출력과 표준 에러 출력이 별도로 처리되지만, "2>&1"을 사용하면 표준 에러 출력을 표준 출력과 동일한 채널로 리다이렉트하여 함께 처리할 수 있습니다.
이를 통해 표준 출력과 표준 에러 출력이 동일한 목적지로 전달되어 효율적인 출력 관리가 가능해집니다.
따라서, "/dev/null"은 출력을 폐기하는 가상의 장치 파일로 사용되며, "2>&1"은 표준 에러 출력을 표준 출력과 병합하여 함께 처리하는 역할을 합니다. 이를 통해 사용자는 필요한 경우 출력을 무시하거나 효율적으로 관리할 수 있습니다.
그냥 리눅스에서 따로 로그 안찍겠다 이말입니다.
이제 어플리케이션을 jar로 말때 로그백을 쓰면 커스텀된 로그관리를 할 수 있습니다.
다음은 로그백 설정 파일입니다. 이 파일은 리소스에 위치합니다.
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<property name="LOG_FILE_PREFIX" value="../logs/TESTAPP" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>UTF-8</charset>
<!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p}\(${PID:- }\)[%t] [%logger{30}:%line] %msg%n</pattern>-->
<pattern>{"level":"%level","time":"%d{yyyy-MM-dd HH:mm:ss.SSS}","thread":"%thread","msg":"%msg"}%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<charset>UTF-8</charset>
<!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p}\(${PID:- }\)[%t] [%logger{30}:%line] %msg%n</pattern>-->
<pattern>{"level":"%level","time":"%d{yyyy-MM-dd HH:mm:ss.SSS}","thread":"%thread","msg":"%msg"}%n</pattern>
</encoder>
<file>${LOG_FILE_PREFIX}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE_PREFIX}_%d{yyyyMMdd}.log</fileNamePattern>
<maxHistory>3</maxHistory>
</rollingPolicy>
</appender>
<root level="WARN">
<appender-ref ref="CONSOLE"/>
</root>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
이제 커스텀된 로그를 확인하실 수 있을겁니다!
로그백에 대한 세부 설정은 방대하므로
다음 기회에 로그백편을 따로 제작해서
더욱 자세히 알아보겠습니다.
이번 편을 통해 서버에 자바를 실행하고 운영해 보세요!!
감사합니다!!!
'기타' 카테고리의 다른 글
2024년 목표 설정 (0) | 2023.12.28 |
---|---|
이직 준비를 위한 과제를 하며 느낀점 (0) | 2023.11.27 |
리눅스 grep vs egrep 골라 써보자 (0) | 2023.11.04 |
리눅스에서 로그 보는법 (0) | 2023.11.04 |
센트OS 6에서 자체 방화벽 비활성화하기 (0) | 2023.11.04 |
댓글