user@linux-tutorials: ~/tutorials/12-automation-and-cron — linux-tutorials

tutorials / linux / chapter-12.md · utf-8 ⬇ download chapter-12.md

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

Linux Automation and Cron Jobs

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

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

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

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

پاسخ:

خیر.

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

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

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

Automation چیست؟

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

برای مثال:

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

user@linux-tutorials: ~/ch-12BASH
cp important.txt backup/

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

چرا Automation مهم است؟

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

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

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

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

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

Cron چیست؟

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

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

مثال:

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

02:00 AM
    |
    ▼
Backup Script

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

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

user@linux-tutorials: ~/ch-12BASH
cron daemon

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

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

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

بررسی وضعیت Cron

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

user@linux-tutorials: ~/ch-12BASH
systemctl status cron

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

user@linux-tutorials: ~/ch-12BASH
systemctl status crond

Crontab چیست؟

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

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

برای مشاهده:

user@linux-tutorials: ~/ch-12BASH
crontab -l

ویرایش Crontab

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

user@linux-tutorials: ~/ch-12BASH
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 زیر را داریم:

user@linux-tutorials: ~/ch-12BASH
backup.sh

محتوا:

#!/bin/bash

mkdir -p backup

cp important.txt backup/

echo "Backup completed"

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

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

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

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

دستور:

user@linux-tutorials: ~/ch-12BASH
find /tmp -type f -mtime +7 -delete

اجرای هفتگی:

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

دستور find و Automation

دستور:

user@linux-tutorials: ~/ch-12BASH
find

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

مثال:

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

user@linux-tutorials: ~/ch-12BASH
find / -size +100M

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

مثال:

user@linux-tutorials: ~/ch-12BASH
sudo apt update

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

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

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

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

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

user@linux-tutorials: ~/ch-12BASH
crontab -l

ویرایش:

user@linux-tutorials: ~/ch-12BASH
crontab -e

حذف Cron Job

برای حذف:

user@linux-tutorials: ~/ch-12BASH
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

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

user@linux-tutorials: ~/ch-12BASH
systemd timer

تفاوت Cron و Systemd Timer

Cron:

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

Systemd Timer:

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

Systemd Timer چیست؟

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

مانند:

user@linux-tutorials: ~/ch-12BASH
service

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

مشاهده Timerها

برای مشاهده:

user@linux-tutorials: ~/ch-12BASH
systemctl list-timers

Automation با Bash

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

مثال:

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

#!/bin/bash

df -h

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

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

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

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

هدف:

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

مراحل:

ساخت فایل:

user@linux-tutorials: ~/ch-12BASH
nano backup.sh

کد:

#!/bin/bash

DATE=$(date +%F)

mkdir -p backup-$DATE

cp -r Documents backup-$DATE

echo "Backup finished"

اجرایی کردن:

user@linux-tutorials: ~/ch-12BASH
chmod +x backup.sh

افزودن به Cron:

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

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

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

ساخت:

user@linux-tutorials: ~/ch-12BASH
system-report.sh

وظیفه:

نمایش:

  • CPU
  • RAM
  • Disk
  • Network
  • Users

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

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

بررسی Log های Cron

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

user@linux-tutorials: ~/ch-12BASH
journalctl -u cron

یا:

user@linux-tutorials: ~/ch-12BASH
grep CRON /var/log/syslog

نکات مهم Automation

هنگام ساخت Automation:

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

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

[01]مشاهده Cron Jobها

user@linux-tutorials: ~/ch-12BASH
crontab -l

[02]ساخت یک Cron Job ساده

user@linux-tutorials: ~/ch-12BASH
crontab -e

[03]اجرای یک Script هر دقیقه.

[04]ساخت Backup Script.

[05]مشاهده Logهای Cron.

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

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

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

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

با ترکیب:

Linux
Bash
Cron
Automation

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