# فصل دوازدهم: خودکارسازی در لینوکس

## Linux Automation and Cron Jobs

در فصل‌های گذشته با Bash Scripting آشنا شدیم و یاد گرفتیم چگونه مجموعه‌ای از دستورها را در قالب Script قرار دهیم.

اما یک سؤال مهم وجود دارد:

اگر یک Script را هر روز، هر ساعت یا در زمان مشخصی اجرا کنیم چه؟

آیا باید همیشه خودمان آن را اجرا کنیم؟

پاسخ:

خیر.

اینجاست که مفهوم **Automation** یا خودکارسازی وارد می‌شود.

خودکارسازی یکی از مهم‌ترین مهارت‌های مدیریت سیستم در لینوکس است.

مدیران سیستم، مهندسان DevOps و متخصصان زیرساخت برای انجام وظایف تکراری از Automation استفاده می‌کنند.

---

# Automation چیست؟

Automation یعنی انجام خودکار یک وظیفه بدون نیاز به دخالت دستی کاربر.

برای مثال:

به جای اینکه هر روز دستور زیر را اجرا کنیم:

    cp important.txt backup/

می‌توانیم سیستمی بسازیم که هر شب خودش این کار را انجام دهد.

---

# چرا Automation مهم است؟

خودکارسازی باعث می‌شود:

- خطای انسانی کاهش پیدا کند.
- زمان صرفه‌جویی شود.
- وظایف تکراری حذف شوند.
- مدیریت سیستم آسان‌تر شود.
- عملیات‌ها قابل اعتمادتر شوند.

---

# کاربردهای Automation در لینوکس

برخی کاربردهای رایج:

- Backup خودکار
- بروزرسانی سیستم
- پاکسازی فایل‌های موقت
- بررسی وضعیت سرور
- ارسال گزارش‌ها
- اجرای Scriptهای مدیریتی
- مانیتورینگ سیستم

---

# Cron چیست؟

Cron یکی از قدیمی‌ترین و محبوب‌ترین ابزارهای زمان‌بندی در لینوکس است.

Cron اجازه می‌دهد دستورها یا Scriptها در زمان مشخص اجرا شوند.

مثال:

اجرای Backup هر شب ساعت ۲:

    02:00 AM
        |
        ▼
    Backup Script

---

# Cron چگونه کار می‌کند؟

یک سرویس به نام:

    cron daemon

در پس‌زمینه سیستم اجرا می‌شود.

این سرویس دائماً بررسی می‌کند که آیا کاری برای اجرا وجود دارد یا خیر.

اگر زمان یک Task برسد، آن را اجرا می‌کند.

---

# بررسی وضعیت Cron

در سیستم‌های لینوکسی:

    systemctl status cron

در بعضی توزیع‌ها:

    systemctl status crond

---

# Crontab چیست؟

Crontab فایل تنظیمات Cron است.

هر کاربر می‌تواند Taskهای مخصوص خود را داشته باشد.

برای مشاهده:

    crontab -l

---

# ویرایش Crontab

برای ایجاد یا تغییر Taskها:

    crontab -e

اولین بار ممکن است از شما Editor درخواست شود.

---

# ساختار Cron Job

هر خط در crontab کاربر شامل پنج فیلد زمانی و سپس دستور است (در مجموع شش بخش). فایل سیستمی `/etc/crontab` یک فیلد اضافه برای نام کاربر دارد.

    دقیقه
    ساعت
    روز ماه
    ماه
    روز هفته
    دستور

ساختار:

    * * * * * command

---

# معنی ستاره در Cron

علامت:

    *

یعنی:

هر مقدار ممکن.

مثال:

    * * * * *

یعنی:

هر دقیقه اجرا شود.

---

# مثال‌های Cron

## اجرای هر دقیقه

    * * * * * command

---

## اجرای هر ساعت

    0 * * * * command

---

## اجرای هر روز ساعت ۳ صبح

    0 3 * * * command

---

## اجرای هر دوشنبه

    0 0 * * 1 command

---

# مقادیر روز هفته

در Cron:

    0 = یکشنبه

    1 = دوشنبه

    2 = سه‌شنبه

    3 = چهارشنبه

    4 = پنج‌شنبه

    5 = جمعه

    6 = شنبه

---

# مثال اجرای Script

فرض کنید Script ما:

    /home/amir/backup.sh

است.

اجرای روزانه ساعت ۲:

    0 2 * * * /home/amir/backup.sh

---

# ذخیره خروجی Cron

به صورت پیش‌فرض خروجی ممکن است ارسال شود.

برای ذخیره در فایل:

    0 2 * * * /home/amir/backup.sh >> /home/amir/backup.log

---

# مدیریت خطا در Cron

بهتر است خطاها را هم ذخیره کنیم:

    0 2 * * * /home/amir/backup.sh >> /home/amir/backup.log 2>&1

در اینجا:

    >>

خروجی معمولی را ذخیره می‌کند.

و:

    2>&1

خطاها را هم به همان فایل ارسال می‌کند.

---

# مثال Backup خودکار

فرض کنید Script زیر را داریم:

    backup.sh


محتوا:

    #!/bin/bash

    mkdir -p backup

    cp important.txt backup/

    echo "Backup completed"

---

اجرای خودکار هر روز:

    0 1 * * * /home/user/backup.sh

---

# مثال پاکسازی فایل‌های قدیمی

فرض کنید می‌خواهیم فایل‌های قدیمی را حذف کنیم.

دستور:

    find /tmp -type f -mtime +7 -delete

اجرای هفتگی:

    0 0 * * 0 find /tmp -type f -mtime +7 -delete

---

# دستور find و Automation

دستور:

    find

یکی از مهم‌ترین ابزارها برای Automation است.

مثال:

پیدا کردن فایل‌های بزرگ:

    find / -size +100M

---

# اجرای خودکار بروزرسانی سیستم

مثال:

    sudo apt update

می‌تواند داخل یک Script قرار گیرد.

اما در سیستم‌های مهم باید با احتیاط استفاده شود.

---

# Cron برای کاربران مختلف

هر کاربر Crontab جداگانه دارد.

مشاهده Cron کاربر فعلی:

    crontab -l

ویرایش:

    crontab -e

---

# حذف Cron Job

برای حذف:

    crontab -r

دقت کنید:

این دستور تمام Cron Jobهای کاربر را حذف می‌کند.

برای درخواست تأیید از `crontab -i -r` استفاده کنید یا ابتدا با `crontab -l` نسخهٔ پشتیبان بگیرید.

---

# فایل‌های Cron سیستمی

علاوه بر کاربران، سیستم نیز Cron دارد.

مسیرهای مهم:

    /etc/crontab

    /etc/cron.hourly

    /etc/cron.daily

    /etc/cron.weekly

    /etc/cron.monthly

---

# Cron در مقابل Systemd Timer

در سیستم‌های جدید لینوکس، ابزار دیگری نیز وجود دارد:

    systemd timer

---

# تفاوت Cron و Systemd Timer

Cron:

- ساده است.
- قدیمی‌تر است.
- برای Taskهای معمولی مناسب است.

Systemd Timer:

- مدرن‌تر است.
- با Systemd هماهنگ است.
- امکانات مدیریتی بیشتری دارد.

---

# Systemd Timer چیست؟

Systemd Timer یک واحد Systemd است که اجرای سرویس‌ها را زمان‌بندی می‌کند.

مانند:

    service

اما با قابلیت زمان‌بندی.

---

# مشاهده Timerها

برای مشاهده:

    systemctl list-timers

---

# Automation با Bash

قدرت واقعی Automation زمانی دیده می‌شود که Bash و Cron را ترکیب کنیم.

مثال:

یک Script برای بررسی فضای دیسک:

    #!/bin/bash

    df -h

سپس اجرای روزانه:

    0 8 * * * /home/user/disk-check.sh

---

# پروژه عملی اول

## ساخت سیستم Backup خودکار

هدف:

ساخت Scriptی که هر روز از فایل‌های مهم Backup بگیرد.

مراحل:

ساخت فایل:

    nano backup.sh


کد:

    #!/bin/bash

    DATE=$(date +%F)

    mkdir -p backup-$DATE

    cp -r Documents backup-$DATE

    echo "Backup finished"

---

اجرایی کردن:

    chmod +x backup.sh

---

افزودن به Cron:

    0 22 * * * /home/user/backup.sh

---

# پروژه عملی دوم

## سیستم گزارش‌گیری سیستم

ساخت:

    system-report.sh

وظیفه:

نمایش:

- CPU
- RAM
- Disk
- Network
- Users

اجرای خودکار:

    0 9 * * * /home/user/system-report.sh

---

# بررسی Log های Cron

برای مشاهده اجرای Cron:

    journalctl -u cron

یا:

    grep CRON /var/log/syslog

---

# نکات مهم Automation

هنگام ساخت Automation:

- مسیر کامل فایل‌ها را استفاده کنید.
- مجوز اجرا را بررسی کنید.
- خروجی‌ها را ذخیره کنید.
- خطاها را مدیریت کنید.
- قبل از اجرای دائمی تست کنید.

---

# تمرین‌های فصل دوازدهم

## تمرین اول

مشاهده Cron Jobها:

    crontab -l


## تمرین دوم

ساخت یک Cron Job ساده:

    crontab -e


## تمرین سوم

اجرای یک Script هر دقیقه.


## تمرین چهارم

ساخت Backup Script.


## تمرین پنجم

مشاهده Logهای Cron.

---

# جمع‌بندی فصل دوازدهم

در این فصل یاد گرفتیم:

- Automation چیست.
- چرا خودکارسازی اهمیت دارد.
- Cron چگونه کار می‌کند.
- چگونه Cron Job بسازیم.
- چگونه Scriptها را زمان‌بندی کنیم.
- چگونه Backup خودکار بسازیم.
- چگونه Logها را بررسی کنیم.
- تفاوت Cron و Systemd Timer چیست.

خودکارسازی یکی از مهم‌ترین مهارت‌های کاربران حرفه‌ای لینوکس است.

با ترکیب:

    Linux
    Bash
    Cron
    Automation

می‌توان سیستم‌هایی ساخت که بدون دخالت دائمی انسان، وظایف خود را به صورت هوشمند انجام دهند.
