Skip to content
isdnetworks
Go back

๋‹ค์‹œ ๋Œ๋ ธ๋”๋‹ˆ ๋‘ ๋ฒŒ์ด ๋“ฑ๋ก๋๋‹ค

(์ˆ˜์ •๋จ)

์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์‹œ ๋Œ๋ ธ๋‹ค. ์˜ต์…˜ ๊ฐ’ ํ•˜๋‚˜๋ฅผ ๋ฐ”๊พธ๋ ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

๋ฉฐ์น  ๋’ค ์ˆ˜์ง‘์ด ๋‘ ๋ฐฐ๋กœ ๋“ค์–ด์™”๋‹ค.

Table of contents

Open Table of contents

์˜ˆ์•ฝ์ด ๋‘ ๊ฐœ์˜€๋‹ค

์˜ˆ์•ฝ ๋ชฉ๋ก์„ ์—ด์–ด ๋ดค๋‹ค.

$ crontab -l
*/5 * * * * /opt/collect/run.sh --offset 0
*/5 * * * * /opt/collect/run.sh --offset 15

๋‘ ์ค„์ด ์žˆ์—ˆ๋‹ค. ์ฒ˜์Œ ๋Œ๋ ธ์„ ๋•Œ ํ•˜๋‚˜๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ  ๋‹ค์‹œ ๋Œ๋ ธ์„ ๋•Œ ํ•˜๋‚˜๊ฐ€ ๋” ๋“ค์–ด๊ฐ„ ๊ฒƒ์ด๋‹ค.

--offset ๊ฐ’์ด ๋‹ฌ๋ผ run.sh ๊ฐ€ 5๋ถ„๋งˆ๋‹ค ๋‘ ๋ฒˆ ๋Œ์•˜๋‹ค. ์˜ต์…˜๋งŒ ๋ฐ”๋€” ์ค„ ์•Œ์•˜๋˜ ๊ฒƒ์ด ํ•ญ๋ชฉ์„ ํ•˜๋‚˜ ๋” ๋งŒ๋“  ์…ˆ์ด๋‹ค.

์›์ธ โ€” ๋”ํ•˜๊ธฐ๋งŒ ํ•˜๋Š” ๋“ฑ๋ก

์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ์˜ ํ•ด๋‹น ์ค„์„ ๋ดค๋‹ค.

(crontab -l 2>/dev/null; echo "*/5 * * * * /opt/collect/run.sh --offset $OFFSET") | crontab -

crontab -l ๋กœ ๊ธฐ์กด ๋ชฉ๋ก์„ ๋ฝ‘๊ณ  ๊ฑฐ๊ธฐ์— ํ•œ ์ค„์„ ๋ง๋ถ™์—ฌ ๋‹ค์‹œ ๋„ฃ๋Š”๋‹ค. ์ง€์šฐ๋Š” ๋‹จ๊ณ„๊ฐ€ ์—†๋‹ค.

ํ•œ ๋ฒˆ ๋Œ๋ฆฌ๋Š” ๊ฒƒ์„ ์ „์ œ๋กœ ์“ด ์ฝ”๋“œ์˜€๋‹ค. ์‹ค์ œ๋กœ๋Š” OFFSET ์„ ๋ฐ”๊ฟ€ ๋•Œ๋งˆ๋‹ค ๋Œ๋ฆฌ๊ฒŒ ๋˜๊ณ  ๊ทธ๋•Œ๋งˆ๋‹ค ์ค„์ด ํ•˜๋‚˜์”ฉ ๋Š”๋‹ค.

์ง€์šฐ๊ณ  ๋„ฃ๊ฒŒ ๋ฐ”๊ฟจ๋‹ค

๊ธฐ์กด ๊ฒƒ์„ ์ง€์šด ๋’ค ๋„ฃ๊ฒŒ ๊ณ ์ณค๋‹ค.

MARK="# managed-by-collect-installer"

# ๊ธฐ์กด ํ•ญ๋ชฉ ์ œ๊ฑฐ ํ›„ ์žฌ๋“ฑ๋ก
( crontab -l 2>/dev/null | grep -v "$MARK"
  echo "*/5 * * * * /opt/collect/run.sh --offset $OFFSET $MARK"
) | crontab -

MARK ๊ฐ€ ๋ถ™์€ ์ค„๋งŒ grep -v ๋กœ ๊ฑธ๋Ÿฌ ๋‚ด๊ณ  ์ƒˆ ์ค„์„ ๋„ฃ๋Š”๋‹ค. ๋ช‡ ๋ฒˆ์„ ๋Œ๋ ค๋„ ๊ทธ ํ‘œ์‹œ๊ฐ€ ๋ถ™์€ ์ค„์€ ํ•˜๋‚˜๋‹ค.

ํ‘œ์‹œ๋ฅผ ๋ถ™์ธ ๊ฒƒ์€ ๋‚จ์˜ ํ•ญ๋ชฉ์„ ์•ˆ ๊ฑด๋“œ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ๋‹ค. ๊ฐ™์€ crontab ์— ๋‹ค๋ฅธ ์ž‘์—…์ด ํ•จ๊ป˜ ์žˆ๋Š”๋ฐ ๋ช…๋ น ์ด๋ฆ„๋งŒ์œผ๋กœ ์ง€์šฐ๋ฉด ์†์œผ๋กœ ๋„ฃ์€ ์ค„๊นŒ์ง€ ๋‚ ์•„๊ฐ„๋‹ค.

๊ฒ€์ฆ โ€” ๋“ฑ๋ก๋œ ๊ฐœ์ˆ˜๋ฅผ ์„ผ๋‹ค

๋“ฑ๋กํ•œ ๋‹ค์Œ์— ๊ฐœ์ˆ˜๋ฅผ ์…Œ๋‹ค.

CNT=$(crontab -l 2>/dev/null | grep -c "$MARK")
if [ "$CNT" -ne 1 ]; then
  echo "์˜ˆ์•ฝ ๋“ฑ๋ก ๊ฒฐ๊ณผ๊ฐ€ ${CNT}๊ฐœ์ž…๋‹ˆ๋‹ค (๊ธฐ๋Œ€: 1)"
  crontab -l | grep "$MARK"
  exit 1
fi
echo "์˜ˆ์•ฝ ๋“ฑ๋ก ํ™•์ธ: 1๊ฐœ"

grep -c ๋กœ ์„ผ ๊ฐ’์ด 1์ด ์•„๋‹ˆ๋ฉด ๋ชฉ๋ก์„ ๋ณด์—ฌ ์ฃผ๊ณ  exit 1 ํ•œ๋‹ค. ๋“ฑ๋ก ๋ช…๋ น์ด ์„ฑ๊ณตํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด ์•„๋‹ˆ๋ผ ์ง€๊ธˆ ๋ช‡ ๊ฐœ๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ๋ณธ๋‹ค.

์ด๋ฒˆ ์ผ์ด ๋”ฑ ๊ทธ ์ฐจ์ด์˜€๋Š”๋ฐ crontab - ์€ ๋‘ ๋ฒˆ ๋‹ค ์„ฑ๊ณตํ–ˆ๊ณ  ๊ทธ๋ž˜์„œ ์•„๋ฌด๋„ ์ด์ƒ์„ ๋ชฐ๋ž๋‹ค.

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋‹ค๋ฅธ ๋ฐ๋„ ์žˆ์—ˆ๋‹ค

์—ฌ๋Ÿฌ ๋ฒˆ ๋Œ๋ฆฌ๋ฉด ๋Š˜์–ด๋‚˜๋Š” ์ž๋ฆฌ๋ฅผ ์ฐพ์•„๋ดค๋‹ค. ์„ค์ • ํŒŒ์ผ์— ์ค„์„ ๋ง๋ถ™์ด๋Š” ๊ฒƒ์ด ๋จผ์ € ๊ฑธ๋ ธ๋‹ค.

# ๋‚˜์จ
echo "PATH=/opt/bin:\$PATH" >> ~/.bashrc

# ๋‚˜์Œ
grep -q "^PATH=/opt/bin" ~/.bashrc || echo "PATH=/opt/bin:\$PATH" >> ~/.bashrc

>> ๋กœ ๋ง๋ถ™์ด๊ธฐ๋งŒ ํ•˜๋ฉด ๊ฐ™์€ ์„ค์ •์ด ์—ฌ๋Ÿฌ ๋ฒˆ ๋“ค์–ด๊ฐ„๋‹ค. ๋Œ€๊ฐœ ๋งˆ์ง€๋ง‰ ๊ฒƒ์ด ์ด๊ธฐ๋ฏ€๋กœ ๋™์ž‘์€ ๋งž๋Š”๋ฐ ํŒŒ์ผ์ด ์ง€์ €๋ถ„ํ•ด์ง€๊ณ  ์ฝ๋Š” ์‚ฌ๋žŒ์ด ํ—ท๊ฐˆ๋ฆฐ๋‹ค.

systemd ์œ ๋‹› ๋“ฑ๋ก๋„ ๊ฐ™์•˜๊ณ  iptables ๊ทœ์น™๋„ ๊ฐ™์•˜๋‹ค. ๊ฐ™์€ ๊ทœ์น™์ด ์—ฌ๋Ÿฌ ๋ฒŒ ๋“ค์–ด๊ฐ€ ๋ชฉ๋ก๋งŒ ๊ธธ์–ด์ ธ ์žˆ์—ˆ๋‹ค.

์…‹ ๋‹ค ์žˆ์œผ๋ฉด ์•ˆ ๋„ฃ๊ฑฐ๋‚˜ ์ง€์šฐ๊ณ  ๋„ฃ๋Š” ์ชฝ์œผ๋กœ ๊ณ ์ณค๋‹ค.

ํŒ๋‹จ ๊ธฐ์ค€ โ€” ๋‘ ๋ฐฉ์‹์˜ ์ฐจ์ด

๋‘ ๋ฐฉ์‹์ด ๊ฐ™์€ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ๊ณ ์น˜๋ฉด์„œ ์•Œ์•˜๋‹ค.

[์žˆ์œผ๋ฉด ์•ˆ ๋„ฃ๋Š”๋‹ค]  ๊ฐ’์ด ๋ฐ”๋€Œ์–ด๋„ ์•ˆ ๋ฐ”๋€๋‹ค โ€” ์˜› ๊ฐ’์ด ๋‚จ๋Š”๋‹ค
[์ง€์šฐ๊ณ  ๋„ฃ๋Š”๋‹ค]     ๊ฐ’์ด ๊ฐฑ์‹ ๋œ๋‹ค โ€” ์†์œผ๋กœ ๊ณ ์นœ ๊ฒƒ๋„ ๋ฎ์ธ๋‹ค

OFFSET ์ฒ˜๋Ÿผ ์ธ์ž๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฐ’์€ ์ง€์šฐ๊ณ  ๋„ฃ๋Š” ์ชฝ์œผ๋กœ ํ–ˆ๋Š”๋ฐ ๋ฐ”๊พธ๋ ค๊ณ  ๋‹ค์‹œ ๋Œ๋ฆฌ๋Š” ๊ฒƒ์ด๋ผ ์•ˆ ๋ฐ”๋€Œ๋ฉด ๋ชฉ์ ์„ ๋ชป ์ด๋ฃฌ๋‹ค.

~/.bashrc ์ฒ˜๋Ÿผ ์‚ฌ๋žŒ์ด ๊ณ ์น˜๋Š” ๊ฒƒ์€ ์žˆ์œผ๋ฉด ์•ˆ ๋„ฃ๋Š” ์ชฝ์œผ๋กœ ๋’€๋‹ค. ๋‹ค์‹œ ๋Œ๋ ธ๋‹ค๊ณ  ์†์œผ๋กœ ๋งž์ถฐ ๋‘” ๊ฐ’์ด ๋‚ ์•„๊ฐ€๋ฉด ์•ˆ ๋œ๋‹ค.

๋ณ€๊ฒฝ ๋‚ด์šฉ โ€” ์‹คํ–‰ ์ „ ์ƒํƒœ ์ถœ๋ ฅ

๋Œ๋ฆฌ๊ธฐ ์ „์— ์ง€๊ธˆ ๋ฌด์—‡์ด ์žˆ๊ณ  ๋ฌด์—‡์ด ๋“ค์–ด๊ฐˆ์ง€๋ฅผ ๋ณด์—ฌ ์ฃผ๊ฒŒ ํ–ˆ๋‹ค.

echo "ํ˜„์žฌ ๋“ฑ๋ก๋œ ํ•ญ๋ชฉ:"
crontab -l 2>/dev/null | grep "$MARK" || echo "  (์—†์Œ)"
echo ""
echo "์ƒˆ๋กœ ๋“ฑ๋กํ•  ํ•ญ๋ชฉ:"
echo "  */5 * * * * /opt/collect/run.sh --offset $OFFSET"
echo ""
printf "๊ณ„์†ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (yes): "
read ans
[ "$ans" = "yes" ] || exit 1

ํ˜„์žฌ ํ•ญ๋ชฉ๊ณผ ์ƒˆ ํ•ญ๋ชฉ์„ ๋‚˜๋ž€ํžˆ ์ฐ๊ณ  read ๋กœ yes ๋ฅผ ๋ฐ›์•„์•ผ ์ง„ํ–‰ํ•˜๋ฏ€๋กœ ์ž˜๋ชป๋œ OFFSET ์„ ๋„ฃ์€ ๊ฒƒ๋„ ๊ทธ ์ž๋ฆฌ์—์„œ ๋ณด์ธ๋‹ค.

์‚ฌ์ „ ์ค€๋น„ โ€” ์ œ๊ฑฐ ์Šคํฌ๋ฆฝํŠธ

์„ค์น˜๋งŒ ์žˆ๊ณ  ์ œ๊ฑฐ๊ฐ€ ์—†์—ˆ๋‹ค. ์ง€์šฐ๋ ค๋ฉด ์‚ฌ๋žŒ์ด crontab -e ๋กœ ์†์ˆ˜ ์ฐพ์•„ ์ง€์›Œ์•ผ ํ–ˆ๋‹ค.

#!/bin/sh
crontab -l 2>/dev/null | grep -v "$MARK" | crontab -
echo "์˜ˆ์•ฝ ์ œ๊ฑฐ ์™„๋ฃŒ"

CNT=$(crontab -l 2>/dev/null | grep -c "$MARK")
[ "$CNT" -eq 0 ] && echo "ํ™•์ธ: 0๊ฐœ" || { echo "์•„์ง ${CNT}๊ฐœ ๋‚จ์Œ"; exit 1; }

์ œ๊ฑฐ ์ชฝ์—๋„ grep -c ํ™•์ธ์„ ๋„ฃ์–ด 0๊ฐœ๊ฐ€ ์•„๋‹ˆ๋ฉด ์‹คํŒจ์‹œํ‚จ๋‹ค. ์„ค์น˜์™€ ์ œ๊ฑฐ๊ฐ€ ์ง์ด๋ฉด ๋ฒˆ๊ฐˆ์•„ ๋Œ๋ ค ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™์€์ง€ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๋Ÿฌ ๋ฒˆ ๋Œ๋ ค์„œ ํ™•์ธํ–ˆ๋‹ค

๊ณ ์นœ ๋’ค์— ์„ธ ๋ฒˆ ์—ฐ์†์œผ๋กœ ๋Œ๋ ธ๋‹ค.

1ํšŒ์ฐจ: ์˜ˆ์•ฝ ๋“ฑ๋ก ํ™•์ธ: 1๊ฐœ
2ํšŒ์ฐจ: ์˜ˆ์•ฝ ๋“ฑ๋ก ํ™•์ธ: 1๊ฐœ
3ํšŒ์ฐจ: ์˜ˆ์•ฝ ๋“ฑ๋ก ํ™•์ธ: 1๊ฐœ

๋ช‡ ๋ฒˆ์„ ๋Œ๋ ค๋„ ํ•˜๋‚˜๋‹ค. ํ•œ ๋ฒˆ ๋Œ๋ ค์„œ ๋˜๋Š” ๊ฒƒ๊ณผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋Œ๋ ค๋„ ๋˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฅธ ์กฐ๊ฑด์ด๋‹ค.

์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๋Š” ๋’ค์ชฝ์ด์–ด์•ผ ํ•˜๋Š”๋ฐ ๊ฐ’์„ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ์ค‘๊ฐ„์— ์‹คํŒจํ•ด ๋‹ค์‹œ ๋Œ๋ฆฌ๋Š” ์ผ์ด ๋ฐ˜๋“œ์‹œ ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ •๋ฆฌ


Share this post on:

Previous Post
ํŠนํ—ˆ ๋‘˜์ด ๊ฐ™์€ ํด๋”์— ์žˆ์—ˆ๋‹ค
Next Post
์‹œํ—˜ ๊ณ„ํš์ด ์ฝ”๋“œ๋ณด๋‹ค ์•ž์ธ ์ด์œ