---
title: کران جاب در اوبونتو
description: برنامه‌های زمان‌بندی کار برای انجام وظایف تکراری طبق یک برنامه تعریف شده بر اساس زمان و شرایط رویداد طراحی شده‌اند.
url: "https://www.novinhost.org/docs/cronjob-in-ubuntu/"
updated: "2025-10-11"
category: راهنمای لینوکس / اوبونتو
---

# کران جاب در اوبونتو

برنامه‌های زمان‌بندی کار برای انجام وظایف تکراری طبق یک برنامه تعریف شده بر اساس زمان و شرایط رویداد طراحی شده‌اند. در این مقاله نحوه نصب و شروع به استفاده از Cron - محبوب‌ترین ابزار اتوماسیون حجم کار لینوکس که به طور گسترده در جامعه لینوکس استفاده می‌شود - را خواهید آموخت.

## کران چیست؟

کرون (Cron) یک زمان‌بند کار لینوکس است که برای تنظیم وظایف جهت اجرا به صورت دوره‌ای در یک تاریخ یا بازه زمانی ثابت استفاده می‌شود. کرون جاب‌ها دستورات خاص یا اسکریپت‌های شل هستند که کاربران در فایل‌های crontab تعریف می‌کنند. سپس این فایل‌ها توسط سرویس کرون (Cron daemon) نظارت می‌شوند و کارها بر اساس یک برنامه از پیش تعیین شده اجرا می‌شوند.

## پیش‌ نیازها

برای دنبال کردن این راهنما، باید موارد زیر را داشته باشید:

- دستگاهی که اوبونتو ۲۰.۰۴ روی آن نصب شده و دسترسی روت دارد.
- تجربه اولیه خط فرمان لینوکس.

## نصب Cron

اغلب اوقات Cron به طور پیش‌فرض روی دستگاه اوبونتو شما نصب شده است. در صورتی که آنجا نباشد، می‌توانید خودتان آن را نصب کنید.

لیست بسته‌های محلی سیستم خود را به‌روزرسانی کنید:

`sudo apt update`

و جدیدترین نسخه cron را نصب کنید. اگر از قبل cron را نصب کرده‌اید، دستور زیر نیز آن را به آخرین نسخه به‌روزرسانی می‌کند:

`sudo apt install cron`

تبریک! اکنون آخرین نسخه Cron روی دستگاه شما نصب شده است.

## درک نحوه کار کرون

کارهای کرون، دستورات یا اسکریپت‌های شلی هستند که در فایل‌های crontab ارجاع داده می‌شوند. این فایل‌ها در حافظه بارگذاری شده و برای اقدامات از پیش تعیین‌شده‌ای که باید انجام شوند، نظارت می‌شوند. کرون هر دقیقه بیدار می‌شود تا تمام crontabهای ذخیره‌شده را بررسی کند و ببیند آیا دستوری باید در دقیقه فعلی اجرا شود یا خیر.

علاوه بر این، Cron زمان تغییر هر فایل crontab را در سیستم نظارت می‌کند. اگر هر crontab تغییر کرده باشد، به طور خودکار در حافظه بارگذاری مجدد می‌شود. به این ترتیب Cron هنگام ایجاد تغییر در crontab نیازی به راه‌اندازی مجدد ندارد.

💡 **نکته حرفه‌ای: ***کرون فرض می‌کند که سیستم شما به طور مداوم 24 ساعته و 7 روز هفته در حال اجرا است، بنابراین برای سرورهایی که باید همیشه آنلاین باشند کاملاً مناسب است. با این حال، `cron`نمی‌تواند وظایفی را که برای زمانی برنامه‌ریزی شده‌اند که سیستم شما آفلاین بوده است، اجرا کند. از آنجایی که این ممکن است برای رایانه‌های رومیزی مشکل‌ساز باشد، `anacron`به جای آن از کرون برای برنامه‌ریزی کارها در فواصل زمانی مشخص تا جایی که زمان روشن بودن دستگاه اجازه می‌دهد، استفاده کنید.*

## اولین کرون جاب خود را تنظیم کنید

هر کار Cron باید در یک crontab مشخص شود - یک فایل پیکربندی که با نام جدول Cron نیز شناخته می‌شود. اولین crontab خود را با استفاده از `crontab`دستوری با گزینه‌ای `-e`که مخفف ویرایش است، ایجاد کنید، اما برای نمونه‌سازی crontab نیز استفاده می‌شود:

`crontab -e`

![کران جاب در اوبونتو](https://www.novinhost.org/wp-content/uploads/2025/10/01-1.png)
کران جاب در اوبونتو

اگر برای اولین بار است که crontab ایجاد می‌کنید، از شما خواسته می‌شود ویرایشگر متن پیش‌فرض خود را انتخاب کنید. ویرایشگر مورد نظر خود [1 - 4] را انتخاب کنید و ENTER را فشار دهید تا یک crontab جدید با ویرایشگر متن انتخابی شما باز شود. crontab تازه ایجاد شده با برخی از نظرات مفید پر شده است:

![کران جاب در اوبونتو](https://www.novinhost.org/wp-content/uploads/2025/10/02.png)

 

حالا بیایید یک Cron job جدید به انتهای این فایل اضافه کنیم:

`* * * * * echo “Hello World at $(date)” >> $HOME/greetings.txt`

هر دقیقه این وظیفه Cron دستور را اجرا می‌کند `echo “Hello World at $(date)” >> $HOME/greetings.txt`. این دستور تاریخ فعلی را بازیابی می‌کند، آن را در رشته "Hello World […]" قرار می‌دهد و رشته را به فایل greetings.txt که در دایرکتوری خانگی شما قرار دارد، اضافه می‌کند. اگر هنوز وجود نداشته باشد، ایجاد خواهد شد.

فایل را ذخیره کرده و خارج شوید. چند دقیقه صبر کنید و فایل greetings.txt را که باید در دایرکتوری خانگی شما ایجاد شده و با داده‌های مرتبط پر شده باشد، بررسی کنید:

`tail ~/greetings.txt`

![کران جاب در اوبونتو](https://www.novinhost.org/wp-content/uploads/2025/10/03.png)

همانطور که می‌بینید، کرون هر دقیقه وظیفه‌ی داده شده را اجرا می‌کند: زمان فعلی در رشته‌ی «Hello World […]» قرار داده شده و به انتهای فایل اضافه می‌شود.

## سینتکس Cron Job را درک کنید

هر وظیفه Cron در یک عبارت Cron نوشته می‌شود که از دو بخش تشکیل شده است: برنامه زمانی و دستوری که باید اجرا شود. در حالی که دستور می‌تواند تقریباً هر دستوری باشد که معمولاً در محیط خط فرمان خود اجرا می‌کنید، نوشتن یک برنامه زمانی مناسب نیاز به کمی تمرین دارد.

سینتکس وظیفه Cron شامل ۶ آرگومان است که با فاصله از هم جدا شده‌اند. ۵ آرگومان اول زمان اجرا را توصیف می‌کنند، در حالی که آرگومان آخر یک دستور یا یک مسیر کامل به یک اسکریپت پوسته است که قرار است توسط پوسته پیش‌فرض اجرا شود:

`[minute] [hour] [day of month] [month] [day of week] [command]`

دستورات توسط Cron زمانی اجرا می‌شوند که فیلدهای دقیقه، ساعت و ماه با زمان فعلی مطابقت داشته باشند، و زمانی که حداقل یکی از فیلدهای روز - چه روز ماه و چه روز هفته - با زمان فعلی مطابقت داشته باشد. مقادیر مجاز عبارتند از:

| میدان | مقادیر مجاز |
| --- | --- |
| دقیقه | ۰-۵۹ |
| ساعت | ۰-۲۳ |
| روز ماه | ۱-۳۱ |
| ماه | ۱-۱۲ (یا نام‌ها: ژانویه - دسامبر) |
| روز هفته | ۰-۶ (یا نام‌ها: یکشنبه - شنبه) |

همچنین برخی کاراکترهای ویژه وجود دارند که می‌توانید برای مشخص کردن زمان اجرا از آنها استفاده کنید:

| مقدار فیلد ویژه | توضیحات | مثال |
| --- | --- | --- |
| ستاره | یک ستاره نشان دهنده هر مقدار مجاز (از اول تا آخر) است. | * (هر ساعت، ماه و غیره اجرا شود) |
| محدوده | یک محدوده شامل دو عدد است که با یک خط تیره از هم جدا شده‌اند. | ۰-۵ (از ساعت ۰ تا ۵، ماه و غیره اجرا می‌شود) |
| فهرست | یک لیست مجموعه‌ای از اعداد یا محدوده‌ها است که با کاما از هم جدا شده‌اند. | ۰،۱،۲،۳،۴،۵ (از ساعت ۰ تا ۵، ماه و غیره اجرا می‌شود) |
| قدم | یک گام (step) همراه با محدوده‌ها یا ستاره‌ها استفاده می‌شود. | */2 (هر ساعت، ماه و غیره اجرا شود) |
| نام | می‌توان از یک نام در فیلدهای ماه یا روز هفته استفاده کرد. نام‌ها به حروف کوچک و بزرگ حساس نیستند. | ژانویه، فوریه، مارس (هر ساله در ماه‌های ژانویه، فوریه و مارس برگزار می‌شود) |
| رشته ویژه | به جای پنج آرگومان اول می‌توان از یک رشته خاص استفاده کرد. | ‎@reboot، @weekly (هر بار در هنگام راه‌اندازی سیستم و یک بار در هفته اجرا می‌شود) |

شما می‌توانید با استفاده از وب‌سایت [crontab.guru](https://crontab.guru/) با قوانین هدف‌گذاری زمان اجرا بازی کنید . این وب‌سایت جای بسیار خوبی برای تعمیق درک شما و بررسی مجدد این است که آیا زمان اجرا را درست تعریف کرده‌اید یا خیر.

💡 **نکته حرفه‌ای: ***@reboot یک بار در هنگام راه‌اندازی cron daemon اجرا می‌شود. به دلیل ترتیب بوت دستگاه، ممکن است این اتفاق قبل از شروع برخی دیگر از daemonهای سیستم رخ دهد. این ممکن است باعث شود برخی از دستورات به درستی کار نکنند.*

## مدیریت فایل‌های پیکربندی Crontab

Crontab که با نام جدول Cron نیز شناخته می‌شود، فهرستی از تنظیمات محیطی و دستورات Cron است که در یک فایل ذخیره می‌شوند و توسط سرویس cron برای اجرای وظایف به صورت زمان‌بندی شده استفاده می‌شوند. انواع مختلفی از فایل‌های crontab موجود است، بنابراین بیایید آنها را یک به یک بررسی کنیم.

### مدیریت فایل‌های Crontab متعلق به کاربر

کاربران فایل‌های crontab مخصوص به خود را دارند که در این `spool`ناحیه ذخیره می‌شوند و با نام حساب کاربری آنها نامگذاری شده‌اند. هر crontab به عنوان کاربری که مالک crontab است اجرا می‌شود. می‌توانید با فهرست کردن تمام فایل‌های موجود در دایرکتوری spool، فایل‌های crontab متعلق به کاربر را بررسی کنید:

`ls /var/spool/cron/crontabs`

![کران جاب در اوبونتو](https://www.novinhost.org/wp-content/uploads/2025/10/04.png)

همانطور که می‌بینید، در حال حاضر ۳ فایل crontab برای کاربرانی با نام‌های `root`، `user1`و ایجاد شده است `user2`.

فایل‌های پیکربندی Crontab مربوط به هر کاربر نباید مستقیماً ویرایش شوند، بلکه باید با استفاده از دستور crontab این کار انجام شود. برنامه crontab بدون نیاز به دسترسی root، خود فایل crontab را تأیید و نصب می‌کند.

شما قبلاً از دستور crontab -e استفاده کرده‌اید که یک crontab جدید برای یک کاربر ایجاد می‌کند یا امکان ویرایش crontab موجود را فراهم می‌کند. می‌توانید با استفاده از دستور زیر، محتوای فایل crontab موجود خود را بررسی کنید:

`crontab -l`

![کران جاب در اوبونتو](https://www.novinhost.org/wp-content/uploads/2025/10/05.png)

 

همانطور که می‌بینید، یک وظیفه فعال Cron وجود دارد که قبلاً اضافه کرده‌ایم.

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

`crontab -r`

### مدیریت فایل‌های Crontab در سطح سیستم

فایل‌های crontab در سطح سیستم، پس از نصب cron ایجاد می‌شوند و عمدتاً توسط سرویس‌های سیستمی مورد استفاده قرار می‌گیرند. بسته‌هایی مانند dpkg، sysstat و بسیاری دیگر به cron وابسته هستند و از آن برای زمان‌بندی وظایف خاص استفاده می‌کنند. در crontab یک سیستم، یک فیلد کاربر وجود دارد که برای اجرای وظایف داده شده استفاده می‌شود.

crontab های سیستم باید متعلق به root باشند و هیچ کاربر دیگری نمی‌تواند آنها را ویرایش کند. هیچ دستور crontab برای ویرایش این فایل‌ها وجود ندارد، بنابراین مدیر سیستم می‌تواند مستقیماً به آنها دسترسی داشته باشد. اکنون بیایید به crontab اصلی سیستم دسترسی پیدا کنیم:

`vim /etc/crontab`

![کران جاب در اوبونتو](https://www.novinhost.org/wp-content/uploads/2025/10/06.png)

همانطور که می‌بینید، متغیرهای محیطی`SHELL` و را تعریف کرده‌ایم. همچنین چهار وظیفه Cron وجود دارد که مختص سیستم عامل‌های مبتنی بر دبیان هستند. این وظایف از ابزار run-parts برای اجرای تمام اسکریپت‌هایی که به ترتیب در ، ، ، به صورت ساعتی، روزانه، هفتگی و ماهانه قرار می‌گیرند، استفاده خواهند کرد.`PATH` `cron.hourly/``cron.daily/``cron.weekly/``cron.monthly/`

هر اسکریپتی که در دایرکتوری‌های ذکر شده در بالا قرار دارد باید از تأیید بخش‌های اجرایی عبور کند. یک اسکریپت باید قابل اجرا باشد، متعلق به root باشد و توسط گروه یا دیگران قابل نوشتن نباشد. اکنون بیایید یک اسکریپت bash ساده ایجاد کنیم که قرار است قیمت بیت کوین را هر ساعت ثبت کند:

`vim /etc/cron.hourly/get_bitcoin_price`

```bash
#!/usr/bin/bash

result=$(curl https://api.coinbase.com/v2/prices/spot?currency=USD)
bitcoin_price=$(jq -r '.data.amount' <<< ${result})
echo "Bitcoin price is $bitcoin_price USD on $(date)" >> $HOME /bitcoin_prices.txt
```

اسکریپت ما از یک API کوین‌بیس پرس‌وجو می‌کند، اطلاعات قیمت بیت‌کوین را در قالب JSON دریافت می‌کند، آن را با برنامه jq تجزیه می‌کند تا قیمت را به صورت Cherry-Pick انتخاب کند و آن را به همراه تاریخ و زمان فعلی در فایل bitcoin_prices.txt در دایرکتوری home /root ثبت می‌کند.

اسکریپتی که در `/etc/cron.daily/`دایرکتوری قرار می‌دهید می‌تواند هر اسکریپتی باشد که دوست دارید به صورت ساعتی اجرا شود. فقط فراموش نکنید که مسیر پوسته مورد نظر خود را در بالا ( `#!/usr/bin/bash`) بنویسید و اسکریپت خود را قابل اجرا کنید:

`chmod u+x /etc/cron.daily/get_bitcoin_price`

شما می‌توانید اسکریپت خود را دوباره بررسی کنید تا مطمئن شوید که قابل اجرا است، متعلق به root است و برای گروه و دیگران قابل نوشتن نیست:

![کران جاب در اوبونتو](https://www.novinhost.org/wp-content/uploads/2025/10/08.png)

به نظر می‌رسد اسکریپت ما به خوبی پیکربندی شده و آماده اجرا توسط Cron به صورت ساعتی است.

همچنین در سیستم‌های مبتنی بر دبیان یک دایرکتوری وجود دارد `/etc/cron.d/`. کرون با تمام فایل‌های موجود در این دایرکتوری مانند `/etc/crontab`فایل اصلی رفتار می‌کند، با این تفاوت که فایل‌های crontab که در /etc/cron.d/ قرار می‌گیرند، متغیرهای محیطی را بارگذاری نمی‌کنند. فقط در صورتی که به ایزوله‌سازی اضافی نیاز دارید، توصیه می‌شود فایل‌های crontab جداگانه‌ای در دایرکتوری /etc/cron.d/ ایجاد کنید.

## مدیریت خروجی Cron

خروجی کارهای cron - چه STDOUT و چه STDERR - به طور پیش‌فرض به طور خودکار به صندوق پستی محلی مالک crontab ارسال می‌شود. صندوق پستی هر کاربر یک فایل متنی استاندارد است که در دایرکتوری ذخیره می‌شود . در صورت نصب بسته `/var/mail/`، می‌توانید مستقیماً یا از طریق دستور mail به آن دسترسی داشته باشید .`mailutils`

شما می‌توانید با تعیین دستورالعمل در فایل crontab خود، رفتار پیش‌فرض را تغییر دهید `MAILTO`. برای مثال، اگر می‌خواهید خروجی وظایف Cron شما به یک کاربر ارسال شود `john`، باید خط زیر را در بالای crontab خود اضافه کنید:

`MAILTO=john`

صندوق پستی محلی یک کاربر با ایمیلی که از طریق اینترنت ارسال می‌شود متفاوت است. اگر می‌خواهید ایمیلی به خارج از سرور خود ارسال کنید، می‌توانید با مشخص کردن دستورالعمل MAILTO به طور مناسب این کار را انجام دهید:

`MAILTO=john@gmail.com`

البته، اگر از طریق شبکه اینترنت ایمیل ارسال می‌کنید ، باید نوعی سرور SMTP - Sendmail، Postfix و غیره - روی همان میزبان یا روی شبکه محلی خود داشته باشید.

## مدیریت لاگ‌ های کرون

لاگ‌های Cron `/var/log/syslog`به طور پیش‌فرض در فایل لاگ سراسری ذخیره می‌شوند. اگر می‌خواهید فعالیت Cron خود را ببینید، فایل syslog را فیلتر کنید تا فعالیت سرویس CRON را پیدا کنید:

`grep CRON /var/log/syslog`

![کران جاب در اوبونتو](https://www.novinhost.org/wp-content/uploads/2025/10/09.png)

فعالیت فایل Crontab نیز ثبت می‌شود. اگر می‌خواهید آن را ببینید، کافیست فایل syslog را به همین ترتیب فیلتر کنید:

`grep crontab /var/log/syslog`

![کران جاب در اوبونتو](https://www.novinhost.org/wp-content/uploads/2025/10/10.png)

فیلتر کردن فایل لاگ سراسری هر بار خیلی راحت نیست. یک روش بهتر این است که ابزار rsyslog را طوری پیکربندی کنید که لاگ‌های cron را در یک فایل جداگانه کپی کند. برای انجام این کار، فایل زیر را ویرایش کنید:

`vim /etc/rsyslog.d/50-default.conf`

شما باید خط زیر را از حالت کامنت خارج کنید:

`cron.* /var/log/cron.log`

فایل را ذخیره کنید و `rsyslog`سرویس را مجدداً راه‌اندازی کنید تا پیکربندی اعمال شود:

`systemctl restart rsyslog`

بعد از مدتی باید یک `cron.log`فایل جدید ایجاد شده در `/var/log/`دایرکتوری را مشاهده کنید که گزارش‌های فعالیت Cron شما در آن قرار دارد:

`cat /var/log/cron.log`

![کران جاب در اوبونتو](https://www.novinhost.org/wp-content/uploads/2025/10/11.png)

اگر پیکربندی syslog را تغییر نداده باشید، هر ورودی گزارش از یک الگوی استاندارد پیروی می‌کند:

`[timestamp] [hostname] [app_name] [log_message]`

برای مثال، می‌توانید ببینید که ردیف‌های گزارش از این الگو پیروی می‌کنند:

`Jan 14 15:12:01 ubuntu-sandbox CRON[345431]: (root) CMD (echo "Hello World at $(date)" >> $HOME/greetings.txt)`

بیایید این فیلدها را بررسی کنیم:

- `timestamp=Jan 14 15:12:01`- تاریخ و زمان تولید پیام در سیستم را نشان داد.
- `hostname=ubuntu-sandbox`- سیستمی را نشان می‌دهد که پیام را ارسال کرده است
- `app_name=CRON[345431]`- نام و شناسه فرآیند برنامه‌ای که پیام را ارسال کرده است را نشان می‌دهد.
- `log_message=(root) CMD (echo “Hello World at $(date)” >> $HOME/greetings.txt)`– عملی که انجام شده است. در این حالت CRON به ما اطلاع می‌دهد که cronjob کاربر root زیر اجرا شده است: `echo “Hello World at $(date)” >> $HOME/greetings.txt`.

💡 **نکته حرفه‌ای: ***شما اطلاعات ثبت وقایع مربوط به اسکریپت‌هایی که در دایرکتوری‌ها اجرا شده‌اند را نخواهید دید `/etc/cron.{hourly, daily, weekly, monthly}/`، مگر اینکه آن اسکریپت‌ها صریحاً خروجی را به فایل cron.log هدایت کنند.*

## نظارت بر Cron Jobs با Cronitor

ممکن است گشتن در لاگ‌های Cron شما دردسرساز باشد، مخصوصاً اگر صدها کار در سیستم شما در حال اجرا باشد. خوشبختانه، ابزارهای نظارت بر کارهای Cron در بازار موجود است که به شما کمک می‌کند کارهای cron خود را رصد کنید و به صورت بلادرنگ بینش کسب کنید.

یکی از این ابزارها Cronitor است که وضعیت، معیارها و خروجی هر کار Cron را ثبت می‌کند. با ابزارهایی مانند Cronitor می‌توانید به راحتی هر کار را نامگذاری و سازماندهی کنید، و همچنین مطمئن شوید که در صورت وقوع اتفاقی، به افراد مناسب هشدار داده می‌شود.

نظارت بر ۵ کرون جاب با Cronitor رایگان است و شروع به کار با آن آسان است. پس از [نصب Cronitor CLI](https://cronitor.io/docs/using-cronitor-cli%23installation) و پیکربندی کلید API خود، دستور زیر را اجرا کنید تا crontab های سیستم خود را برای همه کرون جاب های فعال اسکن کنید:

`cronitor discover`

از شما خواسته می‌شود که کارهای Cron خود را نامگذاری کنید و پس از اتمام کار، Cronitor بلافاصله شروع به نظارت بر آنها می‌کند. می‌توانید وضعیت کارهای Cron خود را بررسی کرده و هشدارها را در داشبورد Cronitor خود پیکربندی کنید:

![کران جاب در اوبونتو](https://www.novinhost.org/wp-content/uploads/2025/10/12.png)

## نتیجه‌ گیری

کرون ابزاری قدرتمند است که اغلب توسط مدیران سیستم برای خودکارسازی وظایف خسته‌کننده استفاده می‌شود. پس از اتمام این راهنما، اکنون درک کاملی از نحوه استفاده از کرون برای زمان‌بندی وظایف در سیستم‌های لینوکس خود دارید. برای اطلاعات بیشتر، می‌توانید به [صفحه رسمی مستندات کرون](https://help.ubuntu.com/community/CronHowto) مراجعه کنید
