2023. 6. 14. 13:37ใSystem ์์ ์ค/Docker
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
๐ Docker Container Backup
๐ฝ ๊ฐ์
๐ฆ ์๊ฐ
์ด๋ฒ์ ํด ๋ณผ ์์
์ Docker Container๋ฅผ tar File๋ก ๋ง๋ค๊ณ , Backup ํ๋ ์์
์ ํด๋ณด๋ ค๊ณ ํด์.
์ด ์์
์ ์ด ๊ณณ์์ ์์
ํ๋ ๋ด์ฉ์ ํ ๋๋ก ์งํ์ด ๋๋ฉฐ, ์๋ํ๋ฅผ ์ํด Shell Script๋ฅผ ๋ง๋ค์ด ๋ณผ๊ฑฐ์์.
Linux์ Shell Script๋ ๋ฆฌ๋
์ค์์ ์ฌ์ฉํ ์ ์๋ ๋ช
๋ น์ด ๋ค์ ์กฐํฉํ์ฌ ํ๋์ ํ๋ก๊ทธ๋จ์ผ๋ก ์๋ํ ์ ์๊ฒ ๋ง๋๋ ๋ฐฉ๋ฒ์ด์์.
๊ทธ๋ ๋ค๋ฉด Shell์ด ๋ฌด์์ผ๊น์?
Shell์ ์ด์์ฒด์ ์์ ์ด์ฉ์๊ฐ ์
๋ ฅํ ๋ช
๋ น์ด๋ฅผ ์ฝ๊ณ , ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ ์ด์ง๋ฒ์ผ๋ก ํด์ํ์ฌ ํด๋น ๋ช
๋ น์ด๋ฅผ ์คํํด์ฃผ๋ ๊ฒ์ด์์.
์ฆ, ์ด์์ฒด์ ์ ์ปค๋๊ณผ ์ด์ฉ์๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ์ฐ๊ฒฐ ๊ณ ๋ฆฌ๋ผ๊ณ ํ ์ ์๊ณ , ๋ช
๋ น์ด ํด์๊ธฐ์์.
๋ฆฌ๋
์ค์์ ์ฌ์ฉํ ์ ์๋ ์ ์ข
๋ฅ๋ ์๋์ ๊ฐ์์.
1. Bash: Bourne-Again Shell (Prompt: #, ๊ฒฝ๋ก: /bin/bash) ๊ฐ์ฅ ๋ํ์ ์ผ๋ก ์ฌ์ฉ.
2. sh : Bourne Shell (Prompt: $, ๊ฒฝ๋ก: /bin/sh)
3. csh: C Shell (Prompt: %, ๊ฒฝ๋ก: /bin/csh)
4. ksh: Kron Shell(Prompt: $, ๊ฒฝ๋ก: /bin/ksh)
5. tcsh: TENEX C Shell (Prompt: >, ๊ฒฝ๋ก: /bin/tcsh)
์ ์คํฌ๋ฆฝํธ๋ ์์์ ์ฌ์ฉํ ์ ์๋ ๋ช
๋ น์ด๋ค์ ์กฐํฉ์ ๋ชจ์์ ๋ง๋ Batch(๋ฐฐ์น) File์ ๋งํด์.
์ฆ, ์ด์์ฒด์ ์ ์์ ์ด์ฉํ์ฌ ํ์ค ์ฉ ์์ฐจ์ ์ผ๋ก ์ฝ์ผ๋ฉด์ ๋ช
๋ น์ด๋ฅผ ์คํ ์์ผ์ฃผ๋ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ด๋ผ๊ณ ํ ์ ์์ด์.
์ ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ์ฌ ๋ฌถ์ด์ง ๋ช
๋ น์ด ์กฐํฉ์ ์ํํ๊ฑฐ๋, ๋ฐ๋ณต์ ์ธ ๋ช
๋ น์ด๋ฅผ ๋จ์ผ ๋ช
๋ น์ด๋ก ์ธ ์ ์๋๋ก ํด ์ค ์ ์์ด์.
๐ฝ Docker Backup
๐ฆ Shell Script ๋ง๋ค๊ธฐ
๋ณธ๊ฒฉ์ ์ผ๋ก ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค์ด ๋ณผ๊ฒ์.
#!/bin/bash
NOW=$(date +"%y-%m-%d %T")
echo "[$NOW] Gitea Docker Container BackUp ์์
์ ์์ ํฉ๋๋ค." >> /var/log/docker/backup/command/junyss-gitea-backup.log 2>&1
echo "[$NOW] ๋ณ์๋ก ์ฌ์ฉ๋ ๋ด์ฉ์ ์ ์ ํฉ๋๋ค." >> /var/log/docker/backup/command/junyss-gitea-backup.log 2>&1
# ๋ฐฑ์
์ ์ฅ๋ ๋๋ ํฐ๋ฆฌ ๊ฒฝ๋ก
BACKUP_DIR="/backup/docker/junyss-gitea"
# ๋ฐฑ์
ํ์ผ์ ์ฌ์ฉ๋ ๋ฐฑ์
๋ ์ง
DATE=$(date +%Y%m%d%H%M)
# Docker Container ์ด๋ฆ
CONTAINER_NAME="junyss-gitea"
# Docker Image ์ด๋ฆ
DOCKER_IMAGE_NAME="junyss/$DATE-junyss-gitea"
# Back Up ์์
echo "[$NOW] Docker Container Back Up ์์
์ ์์ ํฉ๋๋ค." >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
echo "[$NOW] ์ ์ฅํ Directory๊ฐ ์๋์ง ํ์ธ ํ ๊ฒ์." >> /var/log/docker/backup/command/junyss-gitea-backup.log 2>&1
if [ -d "$BACKUP_DIR" ]; then
echo "[$NOW] Directory๊ฐ ์กด์ฌ ํฉ๋๋ค" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
else
echo "[$NOW] Directory๊ฐ ์กด์ฌ ํ์ง ์์ ์์ฑ ํฉ๋๋ค." >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
mkdir -p /backup/docker/junyss-gitea
if [ $? != 0 ]; then
echo "[$NOW] Backup File ์ ์ฅํ Directory ์์ฑ ์คํจ (์คํจ ์ด์ : $?)" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
else
echo "[$NOW] Backup File ์ ์ฅํ Directory ์์ฑ ์ฑ๊ณต" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
fi
echo "[$NOW] Directory ๊ถํ์ ์ค์ ํฉ๋๋ค." >> /var/log/docker/backup/command/junyss-gitea-backup.log 2>&1
chmod -R 755 /backup/docker/junyss-gitea
if [ $? != 0 ]; then
echo "[$NOW] Backup File ์ ์ฅํ Directory ๊ถํ ์ค์ ์คํจ (์คํจ ์ด์ : $?)" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
else
echo "[$NOW] Backup File ์ ์ฅํ Directory ๊ถํ ์ค์ ์ฑ๊ณต" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
fi
fi
echo "[$NOW] ๊ตฌ๋์ค์ธ Container $CONTAINER_NAME์ ์ค์ง ํฉ๋๋ค." >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
docker stop $CONTAINER_NAME
if [ $? != 0 ]; then
echo "[$NOW] ๊ตฌ๋์ค์ธ Container $CONTAINER_NAME์ ์ค์ง ์คํจ (์คํจ ์ด์ : $?)" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
else
echo "[$NOW] ๊ตฌ๋์ค์ธ Container $CONTAINER_NAME์ ์ค์ง ์ฑ๊ณต" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
fi
echo "[$NOW] Docker Container์ ํ์ฌ ์ํ์ Data๋ฅผ Docker Image๋ก ์ ์ฅ ํฉ๋๋ค." >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
docker commit $CONTAINER_NAME junyss/$DATE-$CONTAINER_NAME
if [ $? != 0 ]; then
echo "[$NOW] ๊ตฌ๋์ค์ธ Container $CONTAINER_NAME์ ์ค์ง ์คํจ (์คํจ ์ด์ : $?)" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
else
echo "[$NOW] ๊ตฌ๋์ค์ธ Container $CONTAINER_NAME์ ์ค์ง ์ฑ๊ณต" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
fi
echo "[$NOW] Docker Container ํ์ฌ ์ํ์ Data๋ฅผ tar File๋ก ๋ง๋ญ๋๋ค." >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
docker save -o $BACKUP_DIR/[$NOW]$CONTAINER_NAME.tar $DOCKER_IMAGE_NAME
if [ $? != 0 ]; then
echo "[$NOW] Docker Container ํ์ฌ ์ํ์ Data๋ฅผ tar File ๋ง๋ค๊ธฐ ์คํจ (์คํจ ์ด์ : $?)" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
else
echo "[$NOW] Docker Container ํ์ฌ ์ํ์ Data๋ฅผ tar File ๋ง๋ค๊ธฐ ์ฑ๊ณต" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
fi
echo "[$NOW] ๊ธฐ์กด Container๋ฅผ ๋ค์ ๊ธฐ๋ ํฉ๋๋ค." >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
docker restart $CONTAINER_NAME
if [ $? != 0 ]; then
echo "[$NOW] ๊ธฐ์กด Container๋ฅผ ๋ค์ ๊ธฐ๋ ์คํจ (์คํจ ์ด์ : $?)" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
else
echo "[$NOW] ๊ธฐ์กด Container๋ฅผ ๋ค์ ๊ธฐ๋ ์ฑ๊ณต" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
fi
echo "[$NOW] $CONTAINER_NAME Docker Back Up์ด ๋๋ฌ์ต๋๋ค." >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
์ฃผ๋๊ฐ ๋ง๋ Docker Back up ์ ์คํฌ๋ฆฝํธ๋ ์์ ๊ฐ์์.
์ต์ด ์ฒซ๋ฒ์งธ ์ค์ Bash๋ฅผ ์ด์ฉํ ์คํฌ๋ฆฝํธ ๋ผ๋ ๊ฒ์ ์๋ ค์ฃผ๋ ๋ถ๋ถ์ด์์.
์ด ๋ถ๋ถ์ ๋ฐ๋์ ๋ช
์ํด ์ฃผ์ด์ผ ํฉ๋๋ค.
๋๋ฒ์งธ ์ค์๋ Log์ ์ถ๋ ฅ๋ Date ๊ฐ์ NOW ๋ณ์์ ๋ฃ์ด์ค ๊ฑฐ์์.
์์ ๊ฐ์ด ๋ช
๋ น์ด๋ฅผ ์ฐ๊ฒ ๋๋ฉด [yyyy-mm-dd HH:MM:SS] ํ์์ ์ผ์๊ฐ์ด NOW์ ์ ์ฅ๋๊ฒ ๋์.
echo ๋ช
๋ น์ด๋ ํฐ๋ฏธ๋์ ์ถ๋ ฅํ๋ผ๋ ์๋ฏธ์ธ๋ฐ,
์๋ฐ๋ก ๋ฐ์ง๋ฉด System.out.print ๊ทธ๋ฆฌ๊ณ , ์๋ฐ ์คํฌ๋ฆฝํธ์ ๊ฒฝ์ฐ์๋ console.log์ ๊ฐ์ ์๋ฏธ์์.
์ด๋ ๊ฒ ํด์ NOW ๋ณ์์ ๋ด๊ธด ์ผ์๋ฅผ ์ถ๋ ฅํ๊ณ , ์ถ๋ ฅํ๊ณ ์ ํ๋ ๋ฌธ์์ด์ ์
๋ ฅํด ์ฃผ์์ด์.
>>์ ์๋ฏธ๋ Append์ ์๋ฏธ๋ก >๋ก๋ง ํ๊ฒ ๋๋ฉด ๊ธฐ์กด ๊ฐ์ ๋ค ์ง์ฐ๊ณ , ์๋ก์ด ๊ฐ๋ง ๋ฎ์ด์ฐ๋ ํ์์ผ๋ก ์
๋ ฅ์ด ๋๋๋ฐ,
>> ์ด๋ ๊ฒ ํ์๋ฅผ ํ๊ฒ ๋๋ฉด ๊ณ์ ๋ด์ฉ์ด ์ถ๊ฐ๋๊ฒ ํ ์ ์์ด์.
์ข ๋ ์์ธํ ์ด์ผ๊ธฐ ํด ๋ณด์๋ฉด ์๋์ ๊ฐ์ด ์ค๋ช
ํ ์ ์์ด์.
- > : ๋ช ๋ น์ด ๋ค์ ๋์ค๋ File์ ์ธ ๋, ์ฌ์ฉ - Write or Overwrite)
- >> : ๋ช ๋ น์ด ๋ค์ ๋์ค๋ File์ ์ถ๊ฐํ ๋ ์ฌ์ฉ (Append)
๊ณ์ ํด์ /var/log/docker/backup/command/junyss-gitea-backup.log์ ์๋ฏธ๋ ํด๋น echo์์ ์ถ๋ ฅ๋ ๋ด์ฉ์ ๋๋ ํฐ๋ฆฌ ๋ด์ junyss-gitea-backup.log๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ์์ ํด๋น ๋ด์ฉ์ ์ถ๊ฐ ํ๋ผ๋ ์๋ฏธ์์.
2>&1์ ์๋ฏธ๋ ๋ฌด์์ผ๊น์?
์ด๊ฒ์ Standard Error๋ฅผ Standard Output์ผ๋ก Redirection ํ๋ผ๋ ๋ช
๋ น์ด์์.
๋ณดํต ํ๋ก๊ทธ๋จ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ํ๋ฉด์ ํด๋น Message๋ฅผ ํ์ํด์ ์ฌ์ฉ์์๊ฒ ๊ฒฝ๊ณ ๋ฅผ ์ฃผ๊ฒ ๋๋๋ฐ, ์ด๋ฌํ ๊ธฐ๋ณธ ๋์์ ๋ํด ์ฌ์ฉ์๊ฐ ์์๋ก ์ฌ์ง์ ํ์ฌ ์ค๋ฅ๊ฐ ๋ฐ์ํด๋ ๊ฒฝ๊ณ ๋ฉ์์ง ์ถ๋ ฅ์ ์ฌ์ฉ์ ์์๋ก ์กฐ์ ํ ์ ์๋๋ฐ ์ด๊ฑธ ํ์ค ์๋ฌ ๋ฆฌ๋ค์ด๋ ์
์ด๋ผ๊ณ ๋ถ๋ฅด๊ณ ์์ด์.
์ฆ, ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ฉด ํ๋ก๊ทธ๋จ์ด ๋์์ ๋ฉ์ถ๊ฑฐ๋, ๊บผ์ง๊ฒ ํ์ง ๋ง๊ณ , ๋์ ์๋ฌ ๋ด์ฉ์ ํ์ค ์ถ๋ ฅ ๋์์ผ๋ก ํ๋ํ๊ฒ ํ์ฌ ๋ช
๋ น์ด ์คํ ๊ฒฐ๊ณผ๋ ๋ฌธ์ ๊ฐ ์์ด๋ ํ๋ฉด์ ๊ฒฝ๊ณ ๋ฉ์์ง ์ถ๋ ฅํ์ง ๋ง๊ณ , Log File์ ์์ฑํด๋ผ๋ผ๋ ์๋ฏธ์์.
์ฃผ๋๋ ๊ฒฐ๊ตญ ํด๋น Log File์ ๋ฌธ์ ๊ฐ ๋ฐ์ํด๋ ์ด๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ์ง ๋ง๊ณ , Log File์ ์ฐ๊ธฐ ์ํด์ ์ฌ์ฉํด ์ค ๊ฑฐ์์.
6๋ฒ์งธ ์ค์ Backup ๋ File์ด ์ ์ฅ๋ Directory ๊ฒฝ๋ก๋ฅผ BACKUP_DIR ์ด๋ผ๋ ๋ณ์์ ๋ด์ ์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋ณ์๋ค์ ํ์ํ ๊ฐ์ ๋จผ์ ์ ์ธํด์ฃผ์์ด์.
21๋ฒ์งธ if๋ฌธ์ -d ์ฆ, Directory๋ฅผ ์๋ฏธํ๋๋ฐ, ์์์ ๋ณ์๋ก ์ ์ธํ BACKUP_DIR(/backup/docker/junyss-gitea)๊ฐ ์กด์ฌํ๋๊ฐ?๋ฅผ ๋ฌป๊ณ ์์ด์.
๊ทธ๋์ 22๋ฒ์งธ ์ค์๋ ์กด์ฌ ํ๋ค๋ฉด ์กด์ฌํ๋ ๋ด์ฉ์ Log File์ ์์ฑํ๊ฒ ํด ์ฃผ์๊ณ , 23๋ฒ์งธ else๋ฌธ ์์ 24 ~ 40๋ฒ์งธ๋ Directory๊ฐ ์์ ๋, ํด์ผ ํ๋ ์ผ์ ๋ช
๋ นํด ์ฃผ์์ด์.
์ต์ด 25๋ฒ์งธ ์ค์ ํด๋น Directory๊ฐ ์์ผ๋ mkdir ๋ช
๋ น์ด๋ก ํด๋น Directory๋ฅผ ๋ง๋ค์ด ์ฃผ์์ด์.
๊ทธ๋ฐ ๋ค 27๋ฒ์งธ ์ค์ if ๋ฌธ์ ํตํด ํด๋น ๋ช
๋ น์ด๊ฐ ์ ์คํ ๋์๋์ง๋ฅผ ํ์ธํ๊ณ ์์ด์.
$?๋ ์์ ๋ช
๋ น์ด ์ข
๋ฃ ์ํ(exit status)๋ฅผ ๋ํ๋ด๋ ํน์ ๋ณ์์์. ์ด์ ๋ช
๋ น์ด ์ฑ๊ณต์ ์ผ๋ก ์คํ๋๋ฉด 0๊ฐ์ ๊ฐ์ง๊ณ , ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ๋ค๋ฅธ ๊ฐ์ ๊ฐ์ง๊ฒ ๋๋ต๋๋ค. ์ด ๊ฐ์ ์ผ๋ฐ์ ์ผ๋ก ๋ค๋ฅธ ๋ช
๋ น์ ์คํ, ์ ์ด์ ํ๋ฆ์ ๊ฒฐ์ ํ ๋ ๋ง์ด ์ฌ์ฉํด์.
๊ทธ๋์ If๋ฌธ์์ 0์ด ์๋๋ผ๋ฉด mkdir ์ฆ, Directory ์์ฑ์ ์คํจํ ๊ฑฐ๊ณ , ์? ์คํจ ํ๋์ง๋ฅผ Log์ ๋จ๊ฒจ ์ฃผ๋๋ก ํ์์ด์.
๋ง์ฐฌ๊ฐ์ง๋ก else๋ฌธ์ ํตํด ์ฑ๊ณตํ์ด๋ ์ฑ๊ณต ๋ด์ฉ์ ๋จ๊ธฐ๋๋ก ํ์์ด์.
๋ฆฌ๋
์ค ์ ์คํฌ๋ฆฝํธ์์ if๋ฌธ์ ๋์ด ๋๊ฒ ๋๋ฉด ์๋ฐ์์ ;(์ธ๋ฏธ ์ฝ๋ก )์ ์ฐ์ด์ฃผ๋ ๊ฒ์ฒ๋ผ fi๋ก ๋ง๋ฌด๋ฆฌ๋ฅผ ํด์ฃผ์ด์ผ ํด์.
๊ทธ๋ฆฌ๊ณ 34๋ฒ์งธ ์ค์๋ chmod ๋ช
๋ น์ด๋ฅผ ํตํด ํด๋น Directory์ ๊ถํ์ ์ค์ ํด ์ฃผ๋๋ก ํ์์ด์.
์ต์ด Container๋ฅผ Backup ํ๊ธฐ ์ํด์๋ ๊ธฐ๋์ค์ธ Container๋ฅผ ์ค์ง ์์ผ์ฃผ์ด์ผ ํด์.
๊ทธ๋ฐ ๋ค docker commit ๋ช
๋ น์ด๋ฅผ ํตํด Container์ ํ์ฌ ์ํ์ Data๋ฅผ Docker Image๋ก ์ ์ฅํด ์ฃผ๋๋ก ํ์์ด์.
์ฐธ๊ณ ๋ก Directory Mapping ๋ฑ ์ถ๊ฐ ์ค์ ์ฌํญ์ด ์๋ Container๋ ์ถ๊ฐ์ ์ธ ์์
์ด ๋ ํ์ํด์.
์ด ๋ถ๋ถ์์ ๋ณธ๊ฒฉ์ ์ผ๋ก Container๋ฅผ tar File๋ก ์์ถํด ์ฃผ๊ฒ ๋์. -o ๋ค์ ์์ถ๋ File ์ด๋ฆ์ ์์ฑํ๊ณ , ํ ์นธ์ ๋๊ณ , ์์์ ์ ์ฅํ Docker Image ์ด๋ฆ์ ์์ฑํด ์ฃผ๋ฉด ๋๋ต๋๋ค.
Backup์ด ์คํจํ๊ฑด ์ฑ๊ณตํ๊ฑด ์ด์จ๋ Docker๋ ๋ค์ ๊ธฐ๋๋์ด์ผ ํด์.
๊ทธ๋์ ๋ง์ง๋ง์ผ๋ก ๊ธฐ์กด Container๋ฅผ ๊ธฐ๋ ์์ผ ์ค๋๋ค.
์์ฑ์ด ์๋ฃ ๋์์ผ๋ฉด :wq๋ฅผ ์
๋ ฅํ๊ณ ๋์ ์ค๋๋ค.
๐ฝ Scheduling
๐ฆ crontab ์ฌ์ฉํ๊ธฐ
์์ ๊ฐ์ด ์คํฌ๋ฆฝํธ๋ง ๋ง๋ค๊ฒ ๋๋ฉด ์ฌ์ฉ์๋ ๋ฐฑ์
์ ํ๊ณ ์ถ์ ๋๋ง๋ค ์ฃผ๊ธฐ์ ์ผ๋ก ์๋ฒ์ ์ ์ํด์ ํด๋น ์คํฌ๋ฆฝํธ๋ฅผ ์คํ ์์ผ์ฃผ์ด์ผ ํ๋ค๋ ๊ท์ฐฎ์ ์ผ์ด ๋ฐ์ํ ๊ฑฐ์์.
์ด๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์์์ ์ฒ๋ฆฌํ ์ ์๋๋ก ctontab์ ์ด์ฉํ ์ ์์ด์.
์ฃผ๋๋ ์์ ๊ฐ์ด crontab์ ์์ฑํด ์ฃผ์์ด์.
crontab์ ์์ฑํ๊ธฐ ์ํด์๋ crontab -e ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด ์ฃผ๋ฉด ๋์.
๐ก Crontab
Crontab ๊ธฐ๋ณธ ๋ช ๋ น์ด
crontab -e
Crontab ์ค์
crontab -l
Crontab ๋ด์ฉ ํ์ธ
crontab -r
Crontab ์ญ์
์ฃผ๊ธฐ ์ค์
* * * * *
๋ถ(0-59) ์๊ฐ(0-23) ์ผ(1-31) ์(1-12) ์์ผ(0-7)
๋งค๋ถ test.sh ์คํ* * * * * /home/test.sh
ํน์ ์๊ฐ ์คํ
- ๋งค์ฃผ ๊ธ์์ผ ์ค์ 05์ 45๋ถ test.sh ์คํ45 5 * * 5 /home/test.sh
๋ฐ๋ณต ์คํ
- ๋งค์ผ ๋งค์ 0๋ถ, 20๋ถ, 40๋ถ ๋ง๋ค test.sh ์คํ0,20,40 * * * * /home/test.sh
๋ฒ์ ์คํ
- ๋งค์ผ 01์ 00๋ถ ๋ถํฐ 30๋ถ๊น์ง ๋งค ๋ถ test.sh ์คํ0-30 1 * * * /home/test.shโ
๊ฐ๊ฒฉ ์คํ
- ๋งค 10๋ถ๋ง๋ค test.sh ์คํ
*/10 * * * * /home/test.shโ
๋ณต์กํ ์์
- 5์ผ์์ 6์ผ๊น์ง 2์, 3์, 4์์ ๋งค 10๋ถ๋ง๋ค test.sh ์คํ
*/10 2,3,4, 5-6 * * /home/test.shโ
์ฃผ๋๊ฐ ์
๋ ฅํด ์ค ๊ฒ์ ๋งค์ผ ์์ ์ backup ์คํฌ๋ฆฝํธ๋ฅผ ๋์ ์์ผ์ ๋ฐฑ์
์ ํ๊ณ , ํด๋น ์ฒ๋ฆฌ ๋ด์ฉ์ /var/log/docker/backup/cron/junyss-gitea-bakcup-$(date +%Y%m%d%H%M).log
์ด ๊ณณ์ Append ํ์ฌ Log๋ก ๋จ๊ฒจ๋ผ! ๋ผ๊ณ ๋ฆฌ๋
์ค์๊ฒ ๋ช
๋ นํด ์ค ๊ฑฐ๋๋๋ค.