์ค์น ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ ๋๋ ธ๋ค. ์ต์ ๊ฐ ํ๋๋ฅผ ๋ฐ๊พธ๋ ค๋ ๊ฒ์ด์๋ค.
๋ฉฐ์น ๋ค ์์ง์ด ๋ ๋ฐฐ๋ก ๋ค์ด์๋ค.
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๊ฐ
๋ช ๋ฒ์ ๋๋ ค๋ ํ๋๋ค. ํ ๋ฒ ๋๋ ค์ ๋๋ ๊ฒ๊ณผ ์ฌ๋ฌ ๋ฒ ๋๋ ค๋ ๋๋ ๊ฒ์ ๋ค๋ฅธ ์กฐ๊ฑด์ด๋ค.
์ค์น ์คํฌ๋ฆฝํธ๋ ๋ค์ชฝ์ด์ด์ผ ํ๋๋ฐ ๊ฐ์ ๋ฐ๊พธ๊ฑฐ๋ ์ค๊ฐ์ ์คํจํด ๋ค์ ๋๋ฆฌ๋ ์ผ์ด ๋ฐ๋์ ์๊ธฐ๊ธฐ ๋๋ฌธ์ด๋ค.
์ ๋ฆฌ
- ๋ฑ๋ก ์คํฌ๋ฆฝํธ๊ฐ ๊ธฐ์กด ๊ฒ์ ์ ์ง์ฐ๋ฉด ์คํํ ๋๋ง๋ค ๋์ด๋๋ค
- ํ ๋ฒ ๋๋ฆฌ๋ ๊ฒ์ ์ ์ ๋ก ์ด ์ฝ๋๋ ๋ ๋ฒ์งธ๋ถํฐ ์ด๊ธ๋๋ค
- ์ค ๋์
MARK๋ฅผ ๋ถ์ด๊ณ ๊ทธ ํ์๊ฐ ์๋ ๊ฒ๋ง ์ง์ด ๋ค ๋ฃ๋๋ค - ํ์๊ฐ ์์ผ๋ฉด ์์ผ๋ก ๋ฃ์ ๋จ์ ํญ๋ชฉ์ ์ ๊ฑด๋๋ฆฐ๋ค
- ๋ฑ๋ก ๋ช
๋ น์ ์ฑ๊ณต์ด ์๋๋ผ
grep -c๋ก ์ผ ๊ฐ์๋ฅผ ํ์ธํ๋ค - ์ค์ ํ์ผ๊ณผ ์๋น์ค ๋ฑ๋ก๊ณผ ๋ฐฉํ๋ฒฝ ๊ท์น์๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์๋ค
- ๊ฐ์ด ๋ฐ๋์ด์ผ ํ๋ฉด ์ง์ฐ๊ณ ๋ฃ๊ณ ์ฌ๋์ด ๊ณ ์น๋ ๊ฒ์ ์์ผ๋ฉด ์ ๋ฃ๋๋ค
- ์คํ ์ ์ ํ์ฌ ํญ๋ชฉ๊ณผ ์ ํญ๋ชฉ์ ๋๋ํ ๋ณด์ฌ ์ค๋ค
- ์ค์น์ ์ ๊ฑฐ๋ฅผ ์ง์ผ๋ก ๋ง๋ค๊ณ ์ ๊ฑฐ์๋ ๊ฐ์ ํ์ธ์ ๋ฃ๋๋ค
- ์ธ ๋ฒ ์ฐ์ ๋๋ ค ๊ฒฐ๊ณผ๊ฐ ๊ฐ์์ง ํ์ธํ๋ค