2023. 6. 14. 22:24ใSystem ์์ ์ค/LINUX


๋ฆฌ๋ ์ค ์ปค๋งจ๋๋ผ์ธ ์ ์คํฌ๋ฆฝํธ ๋ฐ์ด๋ธ
COUPANG
www.coupang.com
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
๐ Docker ์๋ ๊ธฐ๋๋๊ฒ ๋ง๋ค๊ธฐ
๐ฝ ๊ฐ์
๐ฆ ์๊ฐ
์ฃผ๋๊ฐ ํ์ฌ ์ด์ํ๊ณ ์๋ ํน์ ์๋ฒ์ Jenkins๋ฅผ Docker๋ฅผ ํตํด ์ค์นํด๋จ๋๋ฐ, Jenkins๊ฐ Host Linux๊ฐ ์ฌ ๋ถํ
๋๋ฉด ์์์ ์ฌ๋ผ์ค์ง ๋ชปํ๋ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๊ฒ ๋์์ด์.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ ๋ถํ
์ด ๋๋ฉด ์๋์ผ๋ก ๊ธฐ๋ ๋๊ฒ ๋ง๋ค์ด ๋ณด๋ ค๊ณ ํด์.
๐ฝ Shell Script
๐ฆ ๋ง๋ค๊ธฐ
#!/bin/bash
# ๋ช
๋ น์ด ์คํจ ์ ๋ฐ๋ก ์คํฌ๋ฆฝํธ๋ฅผ ๋๊ฐ๊ธฐ ์ํ ๋ช
๋ น์ด
set -e
NOW=$(date +"%y-%m-%d %T")
DATE=$(date +%Y%m%d%H%M)
LOG_DIR="/var/log/docker/init/run"
if [ -d "$LOG_DIR" ];
then
echo "[$NOW] Directory๊ฐ ์กด์ฌ ํฉ๋๋ค" >> $LOG_DIR/[$DATE]container-run.log 2>&1
else
mkdir -p $LOG_DIR
if [ $? != 0 ];
then
echo "[$NOW] Log ์ ์ฅ์ ์ํ Directory ๋ง๋ค๊ธฐ ์คํจ ํ์์ต๋๋ค."
exit 1
else
echo "[$NOW] Directory๊ฐ ์กด์ฌ ํ์ง ์์ ์์ฑ ํ์์ต๋๋ค." >> $LOG_DIR/[$DATE]container-run.log 2>&1
fi
fi
echo "[$NOW] Docker Container Run Status Check & Auto Run Job Start" >> $LOG_DIR/[$DATE]container-run.log 2>&1
echo "[$NOW] First Step. Check Docker Container run status" >> $LOG_DIR/[$DATE]container-run.log 2>&1
status=$(docker ps --filter "status=exited")
EXITED_CONTAINER_NAME=$(docker ps --filter "status=exited" --format "{{.Names}}")
echo "[$NOW] Seccond Step. Docker Container Run" >> $LOG_DIR/[$DATE]container-run.log 2>&1
if [ -n "$status" ];
then
echo "[$NOW] $EXITED_CONTAINER_NAME Container๊ฐ ๊ธฐ๋์ค์ด์ง ์์ ๊ธฐ๋ ์ํค๊ฒ ์ต๋๋ค." >> $LOG_DIR/[$DATE]container-run.log 2>&1
CONTAINER_RESTART_STATUS=$(docker restart $EXITED_CONTAINER_NAME)
echo "[$NOW] Container ์ฌ ๊ธฐ๋ ์ํ : $CONTAINER_RESTART_STATUS" >> $LOG_DIR/[$DATE]container-run.log 2>&1
if [ $? != 0 ]
then
echo "[$NOW] $CONTAINER_RESTART_STATUS - Container ์ฌ ๊ธฐ๋ ์คํจ ํ์์ต๋๋ค." >> $LOG_DIR/[$DATE]container-run.log 2>&1
exit 1
else
echo "[$NOW] $CONTAINER_RESTART_STATUS - Container ์ฌ ๊ธฐ๋ ์ฑ๊ณต ํ์์ต๋๋ค." >> $LOG_DIR/[$DATE]container-run.log 2>&1
fi
else
echo "[$NOW] ๋ชจ๋ Container๊ฐ ์ ์ ๊ตฌ๋ ์ค ์
๋๋ค." >> $LOG_DIR/[$DATE]container-run.log 2>&1
fi
echo "[$NOW] Docker Container Run Status Check & Auto Run Job End" >> $LOG_DIR/[$DATE]container-run.log 2>&1
์ฃผ๋๊ฐ ๋ง๋ ์๋ ๊ธฐ๋ ์ ์คํฌ๋ฆฝํธ์์.

์์์ ๋ช
์ํ set -e ๋ช
๋ น์ด๋ ์ ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ ์ ์๋ ๋ช
๋ น์ด์์.
์ด ์น๊ตฌ๋ฅผ ์ค์ ํ๊ฒ ๋๋ฉด ์ด๋ค ๋ช
๋ น์ด๋ฅผ ์ฒ๋ฆฌํ์ ๋, ์คํจํ๊ฒ ๋๋ฉด ์๋ ์๋ ๋ด์ฉ์ ์ฒ๋ฆฌํ์ง ์๊ณ , ๋ฐ๋ก ํด๋น ์คํฌ๋ฆฝํธ๋ฅผ ์ข
๋ฃํ๋ผ๋ ์๋ฏธ์์. ์ฆ, ์ข
๋ฃ ์ํ๊ฐ 0์ด ์๋๋ผ๋ฉด ํด๋น ์คํฌ๋ฆฝํธ๋ ์ข
๋ฃ ๋์ด ๋ฒ๋ฆฌ๊ฒ ํ ๊ฒ์ด์์.
#!/bin/bash
set -e
echo "์คํฌ๋ฆฝํธ ์์"
ls non_existent_file.txt
echo "์ด ๋ถ๋ถ์ ์คํ๋์ง ์์ต๋๋ค."
๋ง์ฝ ํน์ ๋ถ๋ถ์์ ์คํจ๋ฅผ ํ์ ๋๋ ๊ณ์ ์งํํ๊ณ ์ถ๋ค๋ฉด ๊ทธ ๊ณณ์์๋ง set +e ๋ช
๋ น์ด๋ฅผ ๋ช
์ํด ์ฃผ๋ฉด
set -e๋ฅผ ๋ฌด๋งํ๋ ํจ๊ณผ๋ฅผ ์ป์ ์ ์์ด์.
set -e๋ ์คํฌ๋ฆฝํธ์์ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ๋ ๊ฒ์ด์์.
์ฆ, ์คํฌ๋ฆฝํธ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์คํฌ๋ฆฝํธ๊ฐ ๋ฐ๋ก ์ข
๋ฃ๋๊ธฐ ๋๋ฌธ์ ์คํฌ๋ฆฝํธ ์์ฑ ์
์์ธ ์ฒ๋ฆฌ์ ์ค๋ฅ ์ฒ๋ฆฌ์ ์ ๊ฒฝ ์จ์ค์ผ ํด์.

์ด ๋ถ๋ถ์์๋ LOG๋ฅผ ๋จ๊ธธ Directory๊ฐ ์กด์ฌํ๋์ง ํ์ธ์ ํ๊ณ , ์๋ค๋ฉด ๋ง๋ค๊ณ ,
์์ผ๋ฉด ๋ง๋ค์ง ์๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์์ฑํด ์ฃผ์์ด์.
๋ง์ฝ 18๋ฒ์งธ์ค๋ก ๋ค์ด์จ๋ค๋ฉด ๋๋ ํฐ๋ฆฌ ๋ง๋ค๊ธฐ ๋ช
๋ น์ด์ ๋ฌธ์ ๊ฐ ์๊ฒผ๊ธฐ ๋๋ฌธ์ ์คํฌ๋ฆฝํธ๋ ๋ฐ๋ก ์ข
๋ฃ ๋ ๊ฑฐ์์.

์ด ๊ณณ์ด ๋ฐ๋ก ์ค์ ๋ก Container ์ํ๋ฅผ ํ์ธํ๊ณ , ๊ธฐ๋ ์ํค๋ ๋ถ๋ถ์ด์์.
์ต์ด 28๋ฒ์งธ ์ค์ ๋ช
๋ น์ด๋ฅผ ํตํด Container ๊ธฐ๋ ์ํ๊ฐ exited
์ฆ, ์ฃฝ์ด ์๋ container ์ ๋ณด๋ฅผ status ๋ณ์์ ๋ด๋๋ก ํด ์ฃผ์์ด์.
๊ทธ๋ฐ ๋ค 29๋ฒ์งธ ์ค์ ์ฃฝ์ด ์๋ Container์
Container ์ด๋ฆ์ EXITED_CONTAINER_NAME์ ๋ด๋๋ก ์ฒ๋ฆฌํด ์ฃผ์์ด์.
35๋ฒ์งธ ์ค์ ๋ณด๋ฉด status ๋ณ์์ ๋ด๊ธด ์ฃฝ์ด์๋ Container์ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ์ฌ ๊ธฐ๋ ํ ์ ์๋๋ก ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์๊ณ , ๋ช
๋ น์ด ๊ฒฐ๊ณผ๊ฐ์ CONTAINER_RESTART_STATUS ๋ณ์์ ๋ด๋๋ก ํด ์ฃผ์์ด์.
38๋ฒ์งธ ์ค์ ์ ๋ช
๋ น์ด๊ฐ ์คํจํ๋์ง ์ฑ๊ณตํ๋์ง๋ฅผ ๋ถ๊ธฐํ๋ ๋ถ๋ถ์ด๊ณ ,
$?์ด 0์ด ์๋๋ผ๋ฉด ๋ช
๋ น์ด๊ฐ ์คํจํ ๊ฒ์ผ๋ก ๋ฐ๋ก ์คํฌ๋ฆฝํธ๋ฅผ ๋๊ฐ๋๋ก ์ฒ๋ฆฌํด ์ฃผ์์ด์.
์ ์คํฌ๋ฆฝํธ์ ๋ํ ์ข ๋ ์์ธํ ์ด์ผ๊ธฐ๋ ์ด ๊ณณ์ ์ ์ฑ์ค๋ฝ๊ฒ ์ค๋นํด ๋์์ด์.
[Docker] Bash Shell Script๋ฅผ ์ด์ฉํ Docker Backup
๋ฆฌ๋ ์ค ์ปค๋งจ๋๋ผ์ธ ์ ์คํฌ๋ฆฝํธ ๋ฐ์ด๋ธ COUPANG www.coupang.com "์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค." ๐ Docker Container Backup ๐ฝ ๊ฐ์ ๐ฆ ์๊ฐ ์ด
junyharang.tistory.com
๐ฆ ์ ๋๋์ง ํ์ธ!
์ ์ฑ์ค๋ฝ๊ฒ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค์์ผ๋ ํ๋ฒ ํ
์คํธ ํด ๋ณผ๊ฒ์.

์ต์ด ์์ ๊ฐ์ด ๋์ Container๋ฅผ ์ฃฝ์ฌ์ฃผ์์ด์.

ํด๋น ์ ์คํฌ๋ฆฝํธ๋ฅผ ๊ธฐ๋ ์ํค๊ณ , Log๋ฅผ ํ์ธํด๋ณด๋ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ ๋ ๊ฑฐ ๊ฐ์ ๋ณด์ฌ์.

Container๊ฐ ์ ์ฌ๋ผ์จ ๊ฑธ ํ์ธํ ์ ์์ด์.
๐ฝ ์๋ํ ์์
๐ฆ ์ ์คํฌ๋ฆฝํธ ๋ถํ ์ ๊ธฐ๋ ๋๊ฒ ํ๊ธฐ
์์์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค์ด ์ฃผ์์ผ๋ ์ด์ ๋ถํ
์ด ๋๋ฉด ํด๋น ์ ์คํฌ๋ฆฝํธ๋ฅผ ์๋์ผ๋ก ์คํ๋๊ฒ ๋ง๋ค์ด ์ค๊ฒ์.

์ต์ด ์์ ๊ฐ์ด systemd๋ฅผ ์ด์ฉํ์ฌ ์คํฌ๋ฆฝํธ๊ฐ ์์ ํ๋ก๊ทธ๋จ์ ๋ฑ๋ก๋ ์ ์๋๋ก ์์ฑํด ์ฃผ์์ด์.
์์ ๋ด์ฉ์ ๊ฐ๋ตํ๊ฒ ์ ๋ฆฌํด ๋ณด์๋ฉด ์๋์ ๊ฐ์์.
- Description: ์๋น์ค์ ๋ํ ์ค๋ช ์ ๋ ฅ
- After: ์๋น์ค๊ฐ ์คํ๋๊ธฐ ์ ์์กดํด์ผ ํ๋ ๋์์ด ์๋ค๋ฉด ์ง์ . ์๋ฅผ ๋ค์ด Network๊ฐ ์ค๋น๋ ํ์ ์คํ๋์ด์ผ ํ๋ค๋ฉด network.tart์ ์ง์ .
- ExecStart: ์คํํ ์คํฌ๋ฆฝํธ ๊ฒฝ๋ก์ ์ด๋ฆ ์ ๋ ฅ
- WantedBy: ์๋น์ค๊ฐ ํ์ฑํ ๋์ด์ผ ํ๋ ํ๊ฒ์ ์ง์ (์ผ๋ฐ์ ์ผ๋ก default.target ์ด์ฉ)

๊ทธ๋ฆฌ๊ณ , systemd Deamon์ reloadํ ๋ค ํด๋น Service๋ฅผ ์์ ํ๋ก๊ทธ๋จ์ ๋ฑ๋กํด ์ฃผ์์ด์.
๐ฆ ์ ๋๋์ง ํ์ธ!
์ ๋๋์ง ํ์ธ์ ์ํด ์๋ฒ๋ฅผ ์ฌ๊ธฐ๋ ํด ์ค๊ฑฐ์์.


๋ถํ
์ดํ ํ์ธํด๋ณด๋ ์์ ๊ฐ์ด ์ ์ฌ๋ผ์ค๋ ๊ฑธ ํ์ธํ ์ ์์์ด์!

log๋ ์ ๋จ์๊ฑธ ํ์ธํ ์ ์์์ด์.
๋ฆฌ๋ ์ค ์ปค๋งจ๋๋ผ์ธ ์ ์คํฌ๋ฆฝํธ ๋ฐ์ด๋ธ
COUPANG
www.coupang.com
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."

'System ์์ ์ค > LINUX' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Linux]Ubuntu 22.04.01 LTS Desktop ์ค์น (0) | 2023.07.07 |
|---|---|
| [Shell Script] ์๋ฒ ์ฌ๋ถํ ์ Docker ์์ ํน์ Deamon ์๋ ๊ธฐ๋๋๊ฒ ๋ง๋ค๊ธฐ (0) | 2023.06.15 |
| [Shell Script] ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ์ฌ ํน์ ํ๋ก์ธ์ค ์ํ ํ์ธ ๋ค ์๋ ๊ธฐ๋ ์ํค๊ธฐ (0) | 2023.06.14 |
| [Linux] SSL/TLS ์ธ์ฆ์ ๋ง๋ค๊ธฐ (0) | 2022.11.16 |
| [CentOS 7.9] Synology NAS Volume Mount (4) | 2022.11.09 |