๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐˜ฟ๐™–๐™ฉ๐™–๐™—๐™–๐™จ๐™š/๐˜ผ๐™’๐™Ž

๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ํŒŒ์ด์ฌ ํŒŒ์ผ ์‹คํ–‰ ๊ด€๋ฆฌํ•˜๊ธฐ

by beomcoder 2023. 12. 21.
728x90
๋ฐ˜์‘ํ˜•

ํ•ด๊ฒฐํ•œ์ง€๋Š” ์ข€ ๋์ง€๋งŒ ๊ทธ๋ž˜๋„ ์žŠ์–ด๋ฒ„๋ฆฌ์ง€ ์•Š๊ฒŒ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

 

AWS์—์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ 1~2๊ฐœ๋ฅผ ๊ด€๋ฆฌํ• ๋•Œ๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š์•˜๋Š”๋ฐ 4~5๊ฐœ๋ฅผ ๊ด€๋ฆฌํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ๊นŒ ๋ฌธ์ œ๊ฐ€ ๋งŽ์ด ์ƒ๊ฒผ๋‹ค. ์ฒ˜์Œ์—” nohup์œผ๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๊ด€๋ฆฌํ•˜์˜€๋Š”๋ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งŽ์ด ์ƒ๊ธฐ๊ณ  ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋Œ์•„๊ฐ€๋‹ค ๋ณด๋‹ˆ๊นŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์žก์•„๋จน์–ด AWS ์„œ๋ฒ„๊ฐ€ ์ž์ฃผ ๊บผ์ง€๋Š” ์ผ์ด ์ƒ๊ฒผ๋‹ค. ์ด๊ฒƒ์ €๊ฒƒ ์ฐพ์•„๋ณด๋‹ค๊ฐ€ ๊ฒฐ๊ตญ์—” pm2์™€ crontab, shell script๋กœ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€ ๋งˆ์ง€๋ง‰์— ๋‚˜์™€์žˆ์–ด ๋ฐ”๋กœ ์•Œ๊ณ  ์‹ถ์œผ๋ฉด ์ œ์ผ ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐ€๋ฉด ๋œ๋‹ค. ๋‚ด๊ฐ€ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•œ ๋ฐฉ๋ฒ•๋“ค์„ ์ฐจ๋ก€๋Œ€๋กœ ๊ธฐ์ˆ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์ฒ˜์Œ์—” nohup์œผ๋กœ ์ž์ฒด๋กœ ํ•ด๊ฒฐํ•ด๋ณด๋ ค๊ณ  ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ nohup๋งŒ์œผ๋กœ๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์Œ์œผ๋กœ ์‹œ๋„ํ•œ ๋ฐฉ๋ฒ•์€ nohup์œผ๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ํŒŒ์ผ๋“ค์„ ์‹คํ–‰์‹œํ‚ค๊ณ , crontab์œผ๋กœ ์Šค์ผ€์ค„๋งํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

---home

    -- main

        -- api_server

        -- db_update

    -- test

        -- api_server

        -- db_update

 

ํด๋”๋Š” ์ด๋Ÿฐ์‹์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. ํ•œ ํด๋”์— ์ „๋ถ€ ์žˆ์œผ๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ๋  ๊ฒƒ ๊ฐ™์•˜์œผ๋‚˜ ์ž˜ ๋˜์ง€ ์•Š์•˜๋‹ค. ๋จผ์ € ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋งŒ๋“ค์—ˆ๋‹ค. ๋จผ์ € ๋Œ์•„๊ฐ€๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์˜ pid๊ฐ’ 4๊ฐœ๋ฅผ ๋ชจ๋‘ ์ฐพ์•„์„œ kill ๋ช…๋ น์–ด๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฃฝ์ธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ ์‹คํ–‰์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด์„œ ๋ช…๋ น์–ด๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค.

 

#! /bin/bash


# main.py์— ํ•ด๋‹นํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์˜ PID๋ฅผ ์ฐพ์•„์„œ ๋ณ€์ˆ˜์— ์ €์žฅ
pid1=$(pgrep -f "python3 main.py" | awk 'NR==1{print $1}')
pid2=$(pgrep -f "python3 main.py" | awk 'NR==2{print $1}')
pid3=$(pgrep -f "python3 main.py" | awk 'NR==3{print $1}')
pid4=$(pgrep -f "python3 main.py" | awk 'NR==4{print $1}')

# process kill
echo kill -9 $pid1
echo kill -9 $pid2
echo kill -9 $pid3
echo kill -9 $pid4

# ๋‹ค์‹œ ์‹คํ–‰
nohup python3 /home/test/db_update/main.py
# ..
# ..
# ..

# ์‹คํ–‰ํ–ˆ๋Š”์ง€ ๋‚ ์งœ ํ™•์ธ
echo $(date) > test.txt

 

์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  crontab์„ ์ด์šฉํ•˜์—ฌ ์Šค์ผ€์ค„๋ง์„ ํ•ด์ฃผ๊ธฐ๋กœ ํ–ˆ๋‹ค. crontab์€ ํŠน์ •์‹œ๊ฐ„์— ํŠน์ •ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚จ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

$ crontab -e

 

๋ฆฌ๋ˆ…์Šค์—์„œ ํŒŒ์ผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด๋ž‘ ๋˜‘๊ฐ™์ด ์ž‘์„ฑํ•˜๊ณ  :wq๋ฅผ ํ•˜๋ฉด ์ €์žฅ๋œ๋‹ค.

*ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€*ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€*ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€*ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€*
๋ถ„(0-59)ใ€€ใ€€์‹œ๊ฐ„(0-23)ใ€€ใ€€์ผ(1-31)ใ€€ใ€€์›”(1-12)ใ€€ใ€€ใ€€์š”์ผ(0-7)

 

5๊ฐœ์˜ ์ž๋ฆฌ๋ฅผ ์ˆซ์ž๋ฅผ ์ง€์ •ํ•ด์ฃผ๋ฉด ํ•ด๋‹นํ•˜๋Š” ์‹œ๊ฐ„์ด ๋œ๋‹ค. ๋‚˜๋Š” ๋งค์ผ ์˜ค์ „ 3์‹œ์— ์žฌ์‹œ์ž‘์ด ๋˜๋Š” ๊ฑธ ์›ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—

 

0 3 * * * /home/restart.sh

 

๋ผ๊ณ  ์ €์žฅํ•˜๊ณ  :wq๋กœ ๋น ์ ธ๋‚˜์™€ crontab์„ ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค. restart.sh๋Š” ์œ„์— ์ ์€ ์Šคํฌ๋ฆฝํŠธ์˜ ์ด๋ฆ„์ด๋‹ค.

์ž˜ ์ ์€์ง€ ํ™•์ธํ•˜๋ ค๋ฉด crontab -l ๋กœ ํ™•์ธํ•˜๋ฉด ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

crontab์€ ์ž˜ ์‹คํ–‰ํ•˜๊ณ  ์Šคํฌ๋ฆฝํŠธ๋„ ์ž˜ ์‹คํ–‰๋˜์–ด ๋‚ ์งœ๊ฐ€ ์ œ๋Œ€๋กœ ์ฐํ˜€์žˆ๋Š”๋ฐ ํŒŒ์ผ์ด ์ œ๋Œ€๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์•˜๋‹ค. ํ”„๋กœ์„ธ์Šค ์•„์ด๋””๋Š” ์ž˜ ๋ฐ›์•„์˜ค๋Š”๋ฐ kill ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์•˜๋‹ค. 

echo kill -9 $pid1
echo kill -9 $pid2
echo kill -9 $pid3
echo kill -9 $pid4

result = $(kill -9 $(pid1))
result = $(kill -9 $(pid2))
result = $(kill -9 $(pid3))
result = $(kill -9 $(pid4))

 

์œ„์˜ echo kill์„ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐ”๊พธ๋‹ˆ๊นŒ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž˜ ์ฃฝ์—ˆ๋‹ค. ์™œ์ธ์ง€๋Š” ๋‚˜์ค‘์— ์‹œ๊ฐ„์ด ๋‚˜๋ฉด ๊ณต๋ถ€ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์œ„์˜ shํŒŒ์ผ์€ ์ฐพ์€๊ฒŒ ์•„๋‹ˆ๋ผ ์ด๊ฒƒ์ €๊ฒƒ ํ•ด๋ณด๋‹ค๊ฐ€ ๋ฐœ๊ฒฌํ•œ๊ฒƒ์ด๋ผ ๋” ์‰ฌ์šด๋ฐฉ๋ฒ•์ด ์žˆ์„ ์ˆ˜ ๋„ ์žˆ๋‹ค.

 

๊บผ์ง€๊ธด ํ–ˆ๋Š”๋ฐ ํŒŒ์ผ ์‹คํ–‰์ด ๋˜์ง€ ์•Š์•˜๋‹ค. ์›์ธ์„ ๋˜ ์ฐพ์•„๋ณด๋‹ˆ ํด๋” ์œ„์น˜์˜ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค.

 

---home

   -- restart.sh

    -- main

        -- api_server

        -- db_update

    -- test

        -- api_server

        -- db_update

 

์ด๋ ‡๊ฒŒ ํ•˜๋‹ˆ๊นŒ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š”๊ณณ๊ณผ ํŒŒ์ผ์ด ์‹คํ–‰๋˜๋Š” ๊ณณ์˜ ํด๋” ์œ„์น˜๊ฐ€ ๋‹ค๋ฅธ๋ฐ, ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋Š” ํŒŒ์ผ ๋‚ด๋ถ€์—์„œ ๋‹ค๋ฅธ ํŒŒ์ผ๋“ค์„ ๋ถ€๋ฅผ๋•Œ ํ˜„์žฌํด๋” ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑ์„ ํ•ด๋‘์–ด ํŒŒ์ผ์„ ์ œ๋Œ€๋กœ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ์ผ์ผํžˆ ์ „๋ถ€ ์ ˆ๋Œ€๊ฒฝ๋กœ๋กœ ๋ฐ”๊พธ๊ธฐ์—๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ ค ๋‹ค๋ฅธ๋ฐฉ๋ฒ•์„ ์ฐพ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

<ํ•ด๊ฒฐ>

node์—์„œ ์‚ฌ์šฉํ•˜๋Š” pm2๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. pm2๋ฅผ ์‚ฌ์šฉํ•ด์„œ python3์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.

 

sudo apt install npm
npm install -g pm2

 

npm์„ ์„ค์น˜ํ•˜๊ณ  npm์œผ๋กœ pm2๋ฅผ ์„ค์น˜ํ–ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  nohup์œผ๋กœ ์‹คํ–‰์‹œํ‚จ ํ”„๋กœ์„ธ์Šค๋“ค์„ ๋ชจ๋‘ ์ข…๋ฃŒ์‹œ์ผœ์ฃผ๊ณ  pm2๋กœ ํŒŒ์ด์ฌ ํŒŒ์ผ๋“ค์„ ์‹คํ–‰์‹œ์ผœ์ฃผ์—ˆ๋‹ค.

 

์‹คํ–‰์‹œํ‚ค๋Š”๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•˜๋‹ค.

pm2 start /home/main/main.py --name main_api --interpreter python3

 

pm2๋กœ start๋ฅผ ํ•ด์ฃผ๋Š”๋ฐ ์–ด๋”” ํด๋”์— ๋“ค์–ด์žˆ๋Š” ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚ฌ์ง€ ์•Œ๋ ค์ฃผ๋ฉด ๋˜๊ณ , ๋‚˜๋Š” ๋ชจ๋“  ํŒŒ์ผ์ด main.py๋ผ ์ด๋ฆ„์„ ๊ตฌ๋ถ„์ง“๊ธฐ ์œ„ํ•ด --name์œผ๋กœ ์ด๋ฆ„์„ ์ง€์–ด์ฃผ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  python3ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด --interpreter์„ ๋„ฃ์–ด ์ฃผ์—ˆ๋‹ค.

 

 

๊ทธ๋‹ค์Œ ์•„๊นŒ ๋งŒ๋“  restart.shํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•ด์ฃผ์—ˆ๋‹ค.

 

 

๊ทธ๋ฆฌ๊ณ  ์‹œ๊ฐ„์€ ๋”ฐ๋กœ crontab์—์„œ ๋ณ€๊ฒฝ์‹œ์ผœ์ฃผ์ง„ ์•Š์•˜๋‹ค.

๋“œ๋””์–ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์˜€๋‹ค. ์ œ๋Œ€๋กœ ์ž‘๋™๋˜๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด pm2 dash ๋ช…๋ น์–ด๋ฅผ ์ณ๋ณด๋ฉด ๋œ๋‹ค.

 

์ œ๋Œ€๋กœ api ํ†ต์‹ ์„ ํ•˜๊ณ  ์žˆ๋‹ค. nohup์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€, node์˜ pm2๊นŒ์ง€ ์˜ค๋Š” ๊ธธ์ด ๋„ˆ๋ฌด ํ—˜๋‚œํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ์งง๊ฒŒ ์ผ์ง€๋งŒ ๊ต‰์žฅํžˆ ๋งŽ์ด ๊ณ ๋ฏผํ•˜๊ณ  ์ฐพ์•„๋ณด์•„์„œ ์žŠ์–ด๋ฒ„๋ฆฌ์ง€ ์•Š๊ฒŒ ๊ธฐ๋กํ•ด๋‘์–ด์•ผ๊ฒ ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€