کرون جاب در لینوکس؛ از صفر تا صد

کرون جاب چیست؟

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


تفاوت Cron، Crontab و Cron Job

Cron: خود سرویس یا دیمونی که تو پس زمینه اجرا میشه

Crontab: فایل تنظیماتی که لیست وظایف زمان‌بندی شده توش ذخیره میشه هر کاربر فایل crontab مخصوص خودش رو داره

Cron Job: به هر وظیفه یا تسکی که تو crontab تعریف میشه یک کرون جاب میگن


دستورات اصلی مدیریت کرون جاب

دستور کاربرد

crontab -e ویرایش فایل crontab کاربر فعلی

crontab -l نمایش لیست کرون جاب های فعال

crontab -r حذف کامل تمام کرون جاب ها

crontab -u USERNAME -e ویرایش crontab کاربر دیگه (فقط روت) ساختار خط فرمان تو Crontab


هر خط تو فایل crontab از ۶ بخش تشکیل میشه:

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

دقیقه ۰ تا ۵۹

ساعت ۰ تا ۲۳

روز ماه ۱ تا ۳۱

ماه ۱ تا ۱۲ یا Jan-Dec

روز هفته ۰ تا ۷ (۰ و ۷ یکشنبه) یا Sun-Sat


کاراکترهای ویژه

* همه مقادیر (هر دقیقه، هر ساعت و...)

, لیست کردن مقادیر (مثلا ۱,۳,۵)

- بازه (مثلا ۱-۵)

/ بازه های منظم (مثلا /10 یعنی هر ۱۰ دقیقه یکبار)


مثال‌های عملی

مثال ۱: اجرا هر روز ساعت ۲ بامداد

0 2 * * * /usr/bin/php /home/user/backup.php

مثال ۲: اجرا هر ۱۵ دقیقه یکبار

*/15 * * * * /usr/bin/python3 /home/user/monitor.py

مثال ۳: اجرا هر یکشنبه ساعت ۳ صبح

0 3 * * 0 /usr/bin/bash /home/user/weekly_cleanup.sh

مثال ۴: اجرا در روزهای ۱ و ۱۵ هر ماه ساعت ۴ عصر

0 16 1,15 * * /usr/bin/mysqldump --all-databases > /backup/db.sql



متغیرهای محیطی و نکات مهم

تنظیم PATH در کرون جاب

کرون محیط محدودی داره و ممکنه PATH رو نشناسه برای حل این مشکل در ابتدای فایل crontab PATH رو تنظیم کنید:

PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

لاگ گیری خروجی

خروجی کرون جاب ها معمولا به ایمیل کاربر فرستاده میشه برای ذخیره خروجی تو فایل:

0 2 * * * /path/to/script.sh >> /var/log/backup.log 2>&1

خطاهای رایج

اسکریپت اجرا نمیشه: مشکل دسترسی یا PATH

کرون جاب اجرا میشه ولی کاری انجام نمیده: مسیرهای نسبی را به مطلق تبدیل کنید

دستور تو ترمینال کار میکنه ولی تو کرون نه: محیط کرون محدودتره متغیرها رو صریح تعریف کنید


بررسی و عیب یابی کرون جاب ها

مشاهده لاگ کرون

لاگ کرون معمولا تو مسیر زیر ذخیره میشه:

grep CRON /var/log/syslog

در سیستم های مبتنی بر RedHat:

grep CRON /var/log/cron

چک کردن آخرین اجرا

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

ls -la /var/log/backup.log
tail -50 /var/log/backup.log


امنیت در کرون جاب

فایل های مجاز و غیرمجاز

/etc/cron.allow: کاربرانی که اجازه استفاده از کرون دارن

/etc/cron.deny: کاربرانی که دسترسی به کرون ندارن


نکات امنیتی

نکته: اسکریپتای کرون رو با حداقل دسترسی ممکن اجرا کنید


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


نگته: لاگ ها رو به صورت منظم بررسی کنید
 amir

amir

برنامه نویس python, php طراح سایت