آموزش cronjob

آموزش 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 آماده استفاده کنیم که تو جدول زیر میتونید ببینید:

actioncronjob string
اجرا بعد از هر بار ریبوت شدنreboot@
اجرا سالی یه بارyearly@
اجرا ماهی یه بارmonthly@
اجرا هفته‌ای یه بارweekly@
اجرا هر روز یه بارdaily@
اجرا هر یک ساعت یه بارhourly@

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

@reboot <command-to-execute>

مشاهده و مدیریت cronjobها

برای دیدن لیست cronjob هایی که نوشتید :

crontab -l

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

crontab -r

یادتون نره که هر بار که کرون جاب جدیدی نوشتید یا حذف کردید سرویس cron رو ری استارت کنید :

systemctl restart cron

نتیجه گیری

با cronjob می‌تونی کارهای تکراری سرور رو که همیشه دستی میزدی و ازت وقت میگرفت رو اتومات کنی و خیالت راحت باشه که همیشه به موقع اجرا میشن.

امیر محمد امیریمشاهده نوشته ها

Avatar photo

برای من این شروع نقطه‌ی پایانی نداره! راهی که با عشق به لینوکس شروع شد، با پایتون همراه شدم و خودمو تو دنیای دواپس غرق کردم. حالا اینجام! شاید هنوز وسط راه آرزوهام؛ ساده بگم، یاد گرفتن در کنار شما و یاد دادن چیزهایی که به دردتون بخوره.

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *