رفتن به محتوا
LoopX

آزمون بخش ۷: کار حرفه‌ای

این آزمون چهار درس بخش «کار حرفه‌ای» را می‌سنجد. جواب هر سؤال همان لحظه با توضیح نشان داده می‌شود و نتیجه‌ات در همین مرورگر ذخیره می‌شود (پیشرفت من).

؟ آزمون بخش ۷
  1. کدام دستور بکاپ فشرده‌ی پوشه‌ی site را می‌سازد؟

  2. قبل از باز کردن یک آرشیو tar.gz ناشناس چه می‌کنی؟

  3. gzip report.txt را زده‌ای. چه شد؟

  4. چرا نام بکاپ‌ها را با تاریخ می‌نویسیم و بکاپ را آزمایش می‌کنیم؟

  5. پنج فیلد زمان cron به ترتیب؟

  6. «* 2 * * *» چه می‌کند؟

  7. در یک خط crontab علامت % را چطور می‌نویسی؟

  8. کار cron در ترمینال تو درست کار می‌کند ولی در cron نه. محتمل‌ترین علت؟

  9. کجا می‌بینی cron کاری را اجرا کرد؟

  10. کدام دستور خطاهای یک سرویس را از یک ساعت اخیر نشان می‌دهد؟

  11. در لاگ یک سرویس «شکست‌خورده»، به کدام خط نزدیک‌تر به علت اصلی هستی؟

  12. tail -f و tail -F برای لاگی که logrotate می‌چرخاند؟

  13. dmesg چه چیزی نشان می‌دهد؟

  14. logrotate چرا لازم است؟

  15. در پروژه‌ی سرور تازه، چرا کاربر sudo شخصی می‌سازیم و با root کار روزمره نمی‌کنیم؟

  16. پیش از بستن ورود با رمز در sshd مهم‌ترین کار؟

  17. در فایروال سرور دور، کدام ترتیب درست است؟

  18. fail2ban می‌گوید «Currently banned: 1» ولی مهاجم هنوز وصل می‌شود. اول چه می‌کنی؟

🏁 چالش: بکاپ شبانه‌ی خودکار با لاگ و چرخشسخت

با آنچه در این بخش آموختی یک بکاپ خودکار کامل بساز (روی ماشین systemd‌دار آزمایشی):

۱. اسکریپت /usr/local/bin/lx-nightly.sh: از /srv/data با tar -czf بکاپ فشرده‌ی تاریخ‌دار در /var/backups/nightly بسازد، *.tmp را کنار بگذارد، سلامت آرشیو را با tar -tzf بسنجد و فقط ۳ نسخه‌ی آخر را نگه دارد. موفقیت یا شکست را با logger -t nightly (شکست با سطح user.err) ثبت کند. ۲. با cron (crontab کاربر root) اجرایش کن. چون برای ساعت ۲ شب نمی‌شود صبر کرد، زمان را «دو دقیقه‌ی دیگر» بگذار و خروجی را در /var/log/lx-nightly.log ببر. ۳. بعد از اجرا ثابت کن: بکاپ ساخته شد، cron اجرا را در syslog ثبت کرد و journalctl -t nightly پیام موفقیت را دارد. ۴. برای /var/log/lx-nightly.log یک قاعده‌ی logrotate (حداکثر ۴ نسخه، فشرده) بنویس و با logrotate -d آزمایش کن. ۵. خرابی عمدی: /srv/data را موقتاً با mv جابه‌جا کن، اسکریپت را دستی اجرا کن و ثابت کن journalctl -t nightly -p err علت را نشان می‌دهد؛ بعد درستش کن. ۶. همه‌چیز را پاک کن.

راهنمایی

برای زمان cron: date -d '+2 minutes' '+%-M %-H'. در خود اسکریپت % مشکلی ندارد؛ در crontab فقط خود اسکریپت را صدا بزن. برای نگه‌داشتن ۳ نسخه: ls -1t ... | tail -n +4 | xargs -r rm. برای خطا: logger -t nightly -p user.err "...". برای قاعده‌ی logrotate حتماً su root adm را (اگر خطای insecure permissions دیدی) بگذار.

راه‌حل
Terminal window
mkdir -p /srv/data/app /srv/data/tmp
echo "داده‌ی مهم" > /srv/data/app/db.txt
echo "موقت" > /srv/data/tmp/cache.tmp
cat > /usr/local/bin/lx-nightly.sh <<'EOF'
#!/bin/bash
src=/srv/data
dest=/var/backups/nightly
mkdir -p "$dest"
f="$dest/data-$(date +%F_%H%M).tar.gz"
if [ ! -d "$src" ]; then
logger -t nightly -p user.err "منبع $src وجود ندارد؛ بکاپ انجام نشد"
echo "$(date '+%F %T') خطا: $src وجود ندارد"
exit 1
fi
if tar -czf "$f" --exclude='*.tmp' -C "$(dirname "$src")" "$(basename "$src")" && tar -tzf "$f" > /dev/null; then
logger -t nightly "بکاپ سالم ساخته شد: $f"
echo "$(date '+%F %T') بکاپ ساخته شد: $f"
else
logger -t nightly -p user.err "ساخت یا آزمایش بکاپ شکست خورد: $f"
echo "$(date '+%F %T') خطا در بکاپ"
exit 1
fi
ls -1t "$dest"/data-*.tar.gz | tail -n +4 | xargs -r rm -v
EOF
chmod +x /usr/local/bin/lx-nightly.sh
when=$(date -d '+2 minutes' '+%-M %-H')
echo "$when * * * /usr/local/bin/lx-nightly.sh >> /var/log/lx-nightly.log 2>&1" | crontab -u root -
echo "== crontab:"; crontab -l
echo "(صبر تا اجرای cron...)"
sleep 170
echo "== ۳) خروجی کار:"; cat /var/log/lx-nightly.log
echo "== بکاپ‌ها:"; ls /var/backups/nightly
echo "== محتوای بکاپ (فایل cache.tmp نباید باشد):"; tar -tzf /var/backups/nightly/data-*.tar.gz
echo "== cron در syslog:"; grep CRON /var/log/syslog | grep lx-nightly | tail -1 | sed -E 's/^[^ ]+ server //' | cut -c1-110
echo "== journal با برچسب:"; journalctl -t nightly --no-pager -o cat | tail -1
crontab -u root -r
echo "== ۴) قاعده‌ی logrotate"
cat > /etc/logrotate.d/lx-nightly <<'EOF'
/var/log/lx-nightly.log {
weekly
rotate 4
compress
missingok
notifempty
su root adm
}
EOF
logrotate -d /etc/logrotate.d/lx-nightly 2>&1 | grep -E 'considering|log does not need|rotating pattern' | head -2
echo "== ۵) خرابی عمدی"
mv /srv/data /srv/data-broken
/usr/local/bin/lx-nightly.sh
sleep 1
echo "-- journalctl -t nightly -p err:"; journalctl -t nightly -p err --no-pager -o cat | tail -1
mv /srv/data-broken /srv/data
/usr/local/bin/lx-nightly.sh | head -1
echo "== ۶) پاک‌سازی"
rm -rf /srv/data /var/backups/nightly /var/log/lx-nightly.log* /etc/logrotate.d/lx-nightly /usr/local/bin/lx-nightly.sh
خروجی
== crontab:
14 8 * * * /usr/local/bin/lx-nightly.sh >> /var/log/lx-nightly.log 2>&1
(صبر تا اجرای cron...)
== ۳) خروجی کار:
2026-10-04 08:14:01 بکاپ ساخته شد: /var/backups/nightly/data-2026-10-04_0814.tar.gz
== بکاپ‌ها:
data-2026-10-04_0814.tar.gz
== محتوای بکاپ (فایل cache.tmp نباید باشد):
data/
data/app/
data/app/db.txt
data/tmp/
== cron در syslog:
CRON[18174]: (root) CMD (/usr/local/bin/lx-nightly.sh >> /var/log/lx-nightly.log 2>&1)
== journal با برچسب:
بکاپ سالم ساخته شد: /var/backups/nightly/data-2026-10-04_0814.tar.gz
== ۴) قاعده‌ی logrotate
rotating pattern: /var/log/lx-nightly.log weekly (4 rotations)
considering log /var/log/lx-nightly.log
== ۵) خرابی عمدی
2026-10-04 08:15:45 خطا: /srv/data وجود ندارد
-- journalctl -t nightly -p err:
منبع /srv/data وجود ندارد؛ بکاپ انجام نشد
2026-10-04 08:15:46 بکاپ ساخته شد: /var/backups/nightly/data-2026-10-04_0815.tar.gz
== ۶) پاک‌سازی