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 یعنی انجام خودکار یک وظیفه بدون نیاز به دخالت دستی کاربر.
برای مثال:
به جای اینکه هر روز دستور زیر را اجرا کنیم:
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:
- مسیر کامل فایلها را استفاده کنید.
- مجوز اجرا را بررسی کنید.
- خروجیها را ذخیره کنید.
- خطاها را مدیریت کنید.
- قبل از اجرای دائمی تست کنید.
تمرینهای فصل دوازدهم
[01]مشاهده Cron Jobها
crontab -l
[02]ساخت یک Cron Job ساده
crontab -e
[03]اجرای یک Script هر دقیقه.
[04]ساخت Backup Script.
[05]مشاهده Logهای Cron.
جمعبندی فصل دوازدهم
در این فصل یاد گرفتیم:
- Automation چیست.
- چرا خودکارسازی اهمیت دارد.
- Cron چگونه کار میکند.
- چگونه Cron Job بسازیم.
- چگونه Scriptها را زمانبندی کنیم.
- چگونه Backup خودکار بسازیم.
- چگونه Logها را بررسی کنیم.
- تفاوت Cron و Systemd Timer چیست.
خودکارسازی یکی از مهمترین مهارتهای کاربران حرفهای لینوکس است.
با ترکیب:
Linux Bash Cron Automation
میتوان سیستمهایی ساخت که بدون دخالت دائمی انسان، وظایف خود را به صورت هوشمند انجام دهند.