## ⏰ زمانبندی تسکها در لینوکس با Cron
**Cron** یک سرویس زمانبندی وظایف (job scheduler) در سیستمهای یونیکس و لینوکس است که به شما امکان میدهد فرمانها یا اسکریپتها را بهصورت خودکار در زمانهای مشخص اجرا کنید. Cron مناسب اجرای دورهای کارها مثل بکاپگیری، پاکسازی لاگها، ارسال ایمیل هشدار و… است.
---
### ساختار فایل crontab
برای هر کاربر یک فایل `crontab` جداگانه وجود دارد. برای ویرایش آن:
```bash
crontab -e
```
هر خط در فایل crontab شامل ۶ فیلد است:
```
* * * * * command-to-execute
│ │ │ │ │
│ │ │ │ └─ Day of week (0 - 7) (Sunday=0 or 7)
│ │ │ └── Month (1 - 12)
│ │ └─── Day of month (1 - 31)
│ └──── Hour (0 - 23)
└───── Minute (0 - 59)
```
- ستاره (`*`) به معنی «هر» است.
- مقادیر میتوانند بهصورت لیست (مثلاً `1,15`)، بازه (`1-5`) یا گام (`*/10`) باشند.
---
### مثالهای متداول
1. **اجرای اسکریپت هر روز ساعت ۲ بامداد**
```bash
0 2 * * * /home/user/backup.sh
```
2. **پاکسازی لاگ هر ۱۵ دقیقه**
```bash
*/15 * * * * /usr/bin/find /var/log -type f -name "*.log" -delete
```
3. **اجرای دستور در اولین روز هر ماه ساعت ۳ بامداد**
```bash
0 3 1 * * /home/user/monthly_report.sh
```
4. **ارسال ایمیل یادآوری در هر دوشنبه ساعت ۹ صبح**
```bash
0 9 * * 1 echo "Remember the meeting" | mail -s "Weekly Reminder" [email protected]
```
5. **اجرای اسکریپت هر ۵ دقیقه در بازه کاری (۹ تا ۱۷)**
```bash
*/5 9-17 * * 1-5 /home/user/check_status.sh
```
---
### مدیریت crontab
- **لیست وظایف کاربر جاری**
```bash
crontab -l
```
- **حذف تمام وظایف کاربر**
```bash
crontab -r
```
- **ویرایش crontab برای کاربر دیگر (نیاز به sudo)**
```bash
sudo crontab -u username -e
```
---
### لاگگیری Cron
خروجی cron معمولاً از طریق ایمیل کاربر ارسال میشود، اما میتوانید با ریدایرکت خروجی لاگ را به فایل ببرید:
```bash
0 2 * * * /home/user/backup.sh >> /home/user/backup.log 2>&1
```
برای دیدن لاگهای cron:
- در **Debian/Ubuntu**
```bash
grep CRON /var/log/syslog
```
- در **CentOS/RHEL**
```bash
grep CRON /var/log/cron
```
---
### نکات حرفهای
1. **استفاده از مسیرهای مطلق**
همیشه مسیر فرمانها و اسکریپتها را به صورت مطلق مشخص کنید.
2. **تنظیم متغیرهای محیطی**
میتوانید در ابتدای crontab متغیرهایی مثل `PATH` یا `MAILTO` را تنظیم کنید:
```bash
[email protected]
PATH=/usr/local/bin:/usr/bin:/bin
```
3. **اجتناب از همپوشانی اجرا**
برای جلوگیری از دوبار اجرا شدن یک اسکریپت قبل از اتمام اجرای قبلی، از لاک فایل یا ابزارهایی مثل `flock` استفاده کنید:
```bash
* * * * * /usr/bin/flock -n /tmp/lock.file /home/user/task.sh
```
4. **آزمایش زمانبندی**
برای تست سریع یک entry میتوانید بازههای کوتاه (مثلاً هر دقیقه) تنظیم کرده و لاگ ببینید.
5. **محدود کردن با کاربر**
اجرای تسکهای حساس را فقط با کاربر غیر-root انجام دهید تا خطرات امنیتی کاهش یابد.
---
## جمعبندی
Cron یک ابزار ضروری و قدرتمند برای خودکارسازی وظایف در لینوکس است. با تعریف دقیق زمانبندی، ریدایرکت خروجی و رعایت نکات حرفهای میتوانید مطمئن باشید کارها به صورت منظم و بدون نیاز به مداخله دستی انجام میشوند.