TIL - 0511

리눅스와 친해지기

명령어

pipe

  • 두개의 프로그램을 연결해주는 명령어, 앞의 프로그램 결과를 뒤의 프로그램에 전달해줌

redirection

  • 입출력을 변경해주는 명령어
  • 표준 입력 : 키보드 / 표준 출력 : 화면(모니터)
    • ’>’ : 출력을 변경함
 $ ls -al > list.txt
  • ’<’, ‘«’ : 입력을 변경함, ‘<’ 와 ‘«’ 의 차이는 덮어쓰기냐 덮어쓰지않느냐임
      $ head < list.txt
    

filter

  • 결과를 필터링할 때 쓰는 명령어들
  • grep, head, tail, awk(패턴 매칭) 등이 있음

pgrep

  • 프로세스의 ID나 속성값을 기반으로 특정 프로세스를 찾거나 특정 프로세스에 signal을 보내는 명령어
  • java-qna 이름을 기반으로 찾음
$ pgrep -f java-qna

개념, 써보기

서비스와 소켓

  • 서비스 : 메모리에 상주해있으면서(프로세스) 별도로 무언가를 제공하는 프로그램, 속도는 빠르지만 메모리에 상주하고 있음
  • 소켓 : 요청을 받았을 때 메모리에 로드되어 무언가를 제공하는 프로그램, 서비스와 비교했을 때 속도는 느리지만 메모리로 따졌을 때 효율적임
  • /etc/systemd/system에 위치함
  • systemctl start/stop/restart $이름 으로 관리함

쉘스크립트 작성하기

  • 명령어 실행 결과를 변수에 할당하기, 변수 사용하기
target_pid=`pgrep -f java-qna`
echo $target_pid
  • 명령 실행 결과를 할당할 때는 ‘₩’ 로 명령을 감싸야함
  • 사용할 땐 ‘$’ 표시를 변수명 앞에 항상 붙여야함

스프링부트로 웹어플리케이션 만들기

배포 자동화 - crontab 사용

자동 빌드 - 배포 쉘스크립트 작성

  • 디렉토리변경으로 상대경로 쓸 수있도록 함
  • pgrep 사용
/* auto.sh */

#!/bin/zsh

cd /home/ubuntu/java-qna
git fetch
local=`git rev-parse imjinbro`
remote=`git rev-parse origin/imjinbro`

if [ ! $local = $remote ]; then
   rm -rf ./build
   git merge origin/imjinbro
   ./gradlew build
   target_pid=`pgrep -f java-qna`
   kill -9 $ target_pid
   java -jar ./build/libs/java-qna-1.0.0.jar &   
fi

crontab 스크립트 작성

  • java 실행 경로 설정
  • 표준 출력 /dev/null 변경
  • 에러 출력 또한 /dev/null로
/* /etc/crontab */
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/lib/jvm/jdk1.8.0_172/bin

# m h dom mon dow user	command
17 *	* * *	root    cd / && run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

*/5 * * * * ubuntu /home/ubuntu/java-qna/auto.sh > /dev/null 2>&1

풀자, 알고리즘

문제를 풀면서…

  • 반복 조건부터 생각하지않고, 분기 조건(여러 상황 - 조건에 대한 처리)부터 생각하기 : if문 관련 처리 문제에 약한게 느껴짐
  • 테스트 케이스 성공 / 실패 각각 3개 이상은 생각해야 : 경계값은 무조건 포함시켜야함

참고자료