آموزش cronjob | زمان بندی وظایف در لینوکس
مقدمه
همیشه وقتی با لینوکس کار میکنیم به این مشکل بر میخوریم که مثلا میخوایم هر شب ساعت ۲ بامداد بکاپ گرفته بشه، یا هر ۵ دقیقه یه اسکریپت مانیتورینگ اجرا بشه. به جای اینکه دستی هر بار اجرا کنیم، لینوکس یه ابزار به اسم cron (کرون جاب) برامون کنار گداشته که هرکاری که میخوایم بکنیم رو در زمانی که براش مشخص میکنیم اجرا میکنه.
cron یک دستور shell برای زمانبندی یک کار (یعنی دستور یا اسکریپت shell) است تا به صورت دورهای در یک زمان، تاریخ یا فاصله زمانی ثابت اجرا شود.ویکیپدیا
Cron و Cronjob چیست؟
- cron : در واقع همون ابزار یا سرویس زمان بندی در لینوکسه
- cronjob : دستور یا اسکریپتی که طبق زمان مشخص شده توسط cron اجرا میشه.
کرون جاب از پایه ترین ابزارهای مدیریت سرور حساب میشه و برای یه مدیر سرور ضروریه که ازش استفاده کنه.
نصب و فعالسازی cron
اکثر توزیع های لینوکس به طور پیش فرض کرون رو نصب دارن، ولی برای اطمینان سرویس cron رو بررسی میکنیم:
systemctl status cron # ubuntu/debian
systemctl status crond # CentOS/redhat
در صورت نبودن سرویس هم نگرانی نداره مثل همیشه دستور نصب رو چشم بسته میرنیم 🙂
# Ubuntu/Debian
apt install cron -y
systemctl enable --now cron
# CentOS/redhat
yum install cronie -y
systemctl enable --now crond
crontab چیست؟
ctontab همون فایلی هستش که سرویس cron میره و از اون دستورات و اسکریپت هایی که با زمان بندی براش تعریف کردیم رو میخونه و اجرا میکنه.
هر کاربری در لینوکس میتونه کرون جاب مخصوص خودشو داشته باشه.
حالا برای اینکه crontab بسازیم و ساختارشو یاد بگیریم این دستو رو میزنیم
crontab -e
برای اولین بار که این دستور رو بزنید ازتون میپرسه که با کدوم ادیتور متن میخواید فایل crontab رو ادیت کنید که هر کردوم رو حال کردید انتخاب کنید:
no crontab for sk - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /bin/ed
Choose 1-4 [1]:
ساختار crontab
وقتی که وارد فایل crontab خودمون میشیم میتونیم اینجا کرون جاب هایی که میخوایم رو با زمان بندی تعریف کنیم. برای اینکه ساختار کرون جاب هارو راحت یاد بگیریم کد زیر رو نگاه کنید (سخت نیست جلوتر چند تا مثال میزنم که عشق و حالتون به راه بشه)
* * * * * command-to-execute
- - - - -
| | | | └── روز هفته (0-6, شنبه=0)
| | | └──── ماه (1-12)
| | └────── روز ماه (1-31)
| └──────── ساعت (0-23)
└────────── دقیقه (0-59)
مثال های پر کاربرد
چندتا مثال خوب بزنیم تا ساختار کرون جاب ها برامون جا بیفته …
نکته اینجاست که علامت ستاره (*) معنی هر میده 🙂 یعنی توی مثال زیر در دقیقهی صفر ساعت 2 بامداد هر روز هر ماه هر روز هفته این اسکریپت اجرا بشه.
- اجرای اسکریپت بکاپ هر شب ساعت 2 بامداد :
0 2 * * * /home/user/backup.sh
- اجرای اسکریپت گزارش ها هر دوشنبه ساعت 9 صبح :
0 9 * * 1 /home/user/report.sh
- اجرای اسکریپت مانیتورینگ هر 5 دقیقه :
*/5 * * * * /home/user/log.sh
حالا میخوام بهتون یه تقلب بهتون یاد بدم که برید توی این سایت و cronjob هاتون رو بنویسید دقیقا بهتون میگه که چه زمانی اجرا میشن: crontab calculator
استفاده از cronjob string ها
میتونیم به جای اینکه از مقادیری که تا الان مثالاشو دیدیم با هم از چندتا string آماده استفاده کنیم که تو جدول زیر میتونید ببینید:
| action | cronjob string |
| اجرا بعد از هر بار ریبوت شدن | reboot@ |
| اجرا سالی یه بار | yearly@ |
| اجرا ماهی یه بار | monthly@ |
| اجرا هفتهای یه بار | weekly@ |
| اجرا هر روز یه بار | daily@ |
| اجرا هر یک ساعت یه بار | hourly@ |
برای مثال اگه خواستید بعد از هر ریبوت سرور دستور یا اسکریپت اجرا بشه اینجوری مینویسیم:
@reboot <command-to-execute>
مشاهده و مدیریت cronjobها
برای دیدن لیست cronjob هایی که نوشتید :
crontab -l
اگه خواستید همهی کرون جاب هاتون رو پاک کنید :
crontab -r
یادتون نره که هر بار که کرون جاب جدیدی نوشتید یا حذف کردید سرویس cron رو ری استارت کنید :
systemctl restart cron
نتیجه گیری
با cronjob میتونی کارهای تکراری سرور رو که همیشه دستی میزدی و ازت وقت میگرفت رو اتومات کنی و خیالت راحت باشه که همیشه به موقع اجرا میشن.

بدون دیدگاه