๋ชฉ์ฐจ
- SSH๋ฅผ ๋์ผ๋ฉด ์คํ ์ค์ด๋ ํ๋ก๊ทธ๋จ์ด ๊บผ์ง๋ค?
- ํฌ๊ทธ๋ผ์ด๋์ ๋ฐฑ๊ทธ๋ผ์ด๋์ ์ฐจ์ด
- & ๊ธฐํธ๋ก ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํํ๊ธฐ
- nohup์ด๋ ๋ฌด์์ธ๊ฐ?
- nohup๊ณผ &๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- ์คํ ์ค์ธ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค ๊ด๋ฆฌํ๊ธฐ
- PM2 – Node.js ์ฑ์ ์ํ ๋ ๋์ ๋ฐฉ๋ฒ
- ์ ๋ฆฌ ๋ฐ ๋ค์ ๋จ๊ณ
1. SSH๋ฅผ ๋์ผ๋ฉด ์คํ ์ค์ด๋ ํ๋ก๊ทธ๋จ์ด ๊บผ์ง๋ค?
์๋ฒ์ SSH๋ก ์ ์ํด์ Python ์คํฌ๋ฆฝํธ๋ Node.js ์ฑ์ ์คํํ๋๋ฐ, SSH ์ฐ๊ฒฐ์ ๋๋ ์๊ฐ ์คํ ์ค์ด๋ ํ๋ก๊ทธ๋จ๋ ํจ๊ป ์ข ๋ฃ๋๋ ๊ฒฝํ์ ํด๋ณธ ์ ์์ผ์ ๊ฐ์?
์ด๊ฒ์ ๋ฆฌ๋ ์ค์ ์ ์์ ์ธ ๋์์ ๋๋ค. SSH ์ธ์ ์ด ์ข ๋ฃ๋๋ฉด ํด๋น ์ธ์ ์์ ์คํ๋ ๋ชจ๋ ํ๋ก์ธ์ค์ ์ข ๋ฃ ์ ํธ(SIGHUP)๊ฐ ์ ๋ฌ๋์ด ํจ๊ป ์ข ๋ฃ๋ฉ๋๋ค. ์๋ฒ์์ ํ๋ก๊ทธ๋จ์ ์ฅ์๊ฐ ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ nohup๊ณผ & ๋ฅผ ํ์ฉํด์ผ ํฉ๋๋ค.
2. ํฌ๊ทธ๋ผ์ด๋์ ๋ฐฑ๊ทธ๋ผ์ด๋์ ์ฐจ์ด
ํฌ๊ทธ๋ผ์ด๋(Foreground) ์คํ์ ์ผ๋ฐ์ ์ผ๋ก ๋ช ๋ น์ด๋ฅผ ์คํํ์ ๋์ ๋ฐฉ์์ ๋๋ค. ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์ ํฐ๋ฏธ๋์ด ์ ์ ๋์ด ๋ค๋ฅธ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ ์ ์์ต๋๋ค.
๋ฐฑ๊ทธ๋ผ์ด๋(Background) ์คํ์ ํ๋ก๊ทธ๋จ์ด ๋ค์์ ์คํ๋๋ฉด์ ํฐ๋ฏธ๋์ ์ฆ์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ๋ฐ์ ์ ์๋ ์ํ๊ฐ ๋ฉ๋๋ค. ์ฌ๋ฌ ์์ ์ ๋์์ ์คํํ ์ ์์ต๋๋ค.
3. & ๊ธฐํธ๋ก ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํํ๊ธฐ
๋ช ๋ น์ด ๋งจ ๋์ &๋ฅผ ๋ถ์ด๋ฉด ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์คํ๋ฉ๋๋ค.
python3 server.py &
์คํํ๋ฉด PID๊ฐ ์ถ๋ ฅ๋๊ณ ์ฆ์ ํฐ๋ฏธ๋ ์ ์ด๊ถ์ด ๋์์ต๋๋ค. ๋จ, &๋ง์ผ๋ก๋ SSH ์ธ์ ์ด ์ข ๋ฃ๋ ๋ ํ๋ก์ธ์ค๋ ํจ๊ป ์ข ๋ฃ๋ฉ๋๋ค.
4. nohup์ด๋ ๋ฌด์์ธ๊ฐ?
**nohup(no hangup)**์ SSH ์ธ์ ์ด ์ข ๋ฃ๋ ๋ ์ ๋ฌ๋๋ SIGHUP ์ ํธ๋ฅผ ๋ฌด์ํ๋๋ก ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ ๋ช ๋ น์ด์ ๋๋ค. nohup์ ์ฌ์ฉํ๋ฉด SSH ์ฐ๊ฒฐ์ด ๋๊ฒจ๋ ํ๋ก์ธ์ค๊ฐ ๊ณ์ ์คํ๋๋ฉฐ, ํ์ค ์ถ๋ ฅ์ด ์๋์ผ๋ก nohup.out ํ์ผ์ ์ ์ฅ๋ฉ๋๋ค.
๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ์ ์๋์ ๊ฐ์ต๋๋ค.
nohup python3 server.py
์ด๋ ๊ฒ ์คํํ๋ฉด SSH๋ฅผ ๋์ด๋ ํ๋ก์ธ์ค๊ฐ ์ด์์์ง๋ง, ํฐ๋ฏธ๋์ด ์ฌ์ ํ ์ ์ ๋ฉ๋๋ค.
5. nohup๊ณผ &๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
์ค์ ์์๋ nohup๊ณผ &๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค. nohup์ผ๋ก ์ธ์ ์ข ๋ฃ ์ ํธ๋ฅผ ๋ฌด์ํ๊ณ , &๋ก ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ๊น์ง ๊ฒฐํฉํฉ๋๋ค.
nohup python3 server.py &
์ถ๋ ฅ ๋ก๊ทธ๋ฅผ ํน์ ํ์ผ์ ์ ์ฅํ๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด ๋ฆฌ๋ค์ด๋ ์ ์ ์ถ๊ฐํฉ๋๋ค. 2>&1์ ํ์ค ์ค๋ฅ(stderr)๋ ํจ๊ป ๋ก๊ทธ ํ์ผ์ ๊ธฐ๋กํ๋ผ๋ ์๋ฏธ์ ๋๋ค.
nohup python3 server.py > /var/log/myapp.log 2>&1 &
6. ์คํ ์ค์ธ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค ๊ด๋ฆฌํ๊ธฐ
์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ํ์ธํ ๋๋ ps aux์ grep์ ์กฐํฉํฉ๋๋ค.
ps aux | grep python3
PID๋ฅผ ํ์ธํ ํ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํฉ๋๋ค.
kill ํ๋ก์ธ์คPID
๊ฐ์ ์ข ๋ฃ๊ฐ ํ์ํ ๊ฒฝ์ฐ์๋ -9 ์ต์ ์ ์ถ๊ฐํฉ๋๋ค.
kill -9 ํ๋ก์ธ์คPID
ํ์ฌ ์ธ์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ๋ชฉ๋ก์ jobs ๋ช ๋ น์ด๋ก ํ์ธํ๊ณ , fg %์์ ๋ฒํธ๋ก ํฌ๊ทธ๋ผ์ด๋๋ก ์ ํํ ์ ์์ต๋๋ค.
7. PM2 – Node.js ์ฑ์ ์ํ ๋ ๋์ ๋ฐฉ๋ฒ
Node.js ์ฑ์ ์ด์ํ๋ค๋ฉด nohup ๋์ PM2๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฐ๋ ฅํ ์ถ์ฒํฉ๋๋ค. PM2๋ Node.js ์ฑ ์ ์ฉ ํ๋ก์ธ์ค ๋งค๋์ ๋ก, ์ฑ์ด ์ค๋ฅ๋ก ์ข ๋ฃ๋๋ฉด ์๋ ์ฌ์์, ๋ก๊ทธ ๊ด๋ฆฌ, ํด๋ฌ์คํฐ ๋ชจ๋ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
PM2๋ฅผ ์ ์ญ์ผ๋ก ์ค์นํฉ๋๋ค.
npm install -g pm2
์ฑ์ ์์ํ๊ณ ์ฌ๋ถํ ํ ์๋ ์์์ ๋ฑ๋กํฉ๋๋ค.
pm2 start app.js
pm2 startup
pm2 save
์คํ ์ค์ธ ์ฑ ๋ชฉ๋ก ํ์ธ๊ณผ ์ค์๊ฐ ๋ก๊ทธ ํ์ธ์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
pm2 list
pm2 logs
8. ์ ๋ฆฌ ๋ฐ ๋ค์ ๋จ๊ณ
์ค๋ ๋ฐฐ์ด ํต์ฌ์ ์ ๋ฆฌํฉ๋๋ค.
- SSH ์ธ์ ์ด ์ข ๋ฃ๋๋ฉด ํด๋น ์ธ์ ์ ํ๋ก์ธ์ค๋ ํจ๊ป ์ข ๋ฃ๋ฉ๋๋ค.
- &๋ฅผ ๋ถ์ด๋ฉด ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ์ด ๊ฐ๋ฅํ์ง๋ง, SSH ์ข ๋ฃ ์ ํจ๊ป ์ข ๋ฃ๋ฉ๋๋ค.
- nohup์ SSH ์ข ๋ฃ ์ ํธ๋ฅผ ๋ฌด์ํด ์ธ์ ์ด ๋๊ฒจ๋ ํ๋ก์ธ์ค๊ฐ ์ ์ง๋ฉ๋๋ค.
- ์ค์ ์์๋ nohup ๋ช ๋ น์ด & ํํ๋ก ๋ ๊ฐ์ง๋ฅผ ํจ๊ป ์ฌ์ฉํฉ๋๋ค.
- Node.js ์ฑ์ด๋ผ๋ฉด PM2๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ํธ๋ฆฌํ๊ณ ์์ ์ ์ ๋๋ค.
๋ค์ ๊ธ์์๋ ์๋ฒ ๋ฐฑ์ ์ ์๋ํํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.