Cron Job چیست؟ راهنمای کامل زمانبندی در سرور و n8n (نسخه ۲۰۲۶)
یک گزارش حیاتی که باید ۹ صبح روی میز مدیرعامل میبود، فراموش شد. یک بکآپ شبانه که به دلیل خطای انسانی اجرا نشد، فاجعه آفرید و دادههای یک روز کامل را از بین برد.
اینها سناریوهای تئوری نیستند؛ اینها بخشی از درسهای پرهزینه پروژههایی هستند که پیش از پیادهسازی Cron Job و اتوماسیون زمانبندیشده، با آنها دست و پنجه نرم میکردند. یک فراموشی ساده، یک سهلانگاری کوچک، میتواند یک قرارداد چند صد میلیونی را به خطر بیندازد یا اعتبار فنی یک تیم را زیر سوال ببرد. زمانبندی دستی و اتکا به حافظه انسان، یک ریسک غیرقابل قبول در کسبوکارهای مدرن است.
اینجاست که کرون جاب وارد میشود. اما نه به عنوان یک ابزار ساده، بلکه به عنوان «خدمتکار دیجیتال و خستگیناپذیر سرور». یک مکانیزم مهندسیشده که ریسک خطای انسانی را برای همیشه به صفر نزدیک میکند. کرون، زیربنای اتوماسیون است. تسلط بر آن یک ضرورت است، اما همانطور که در راهنمای جامع n8n توضیح دادیم، قدرت واقعی زمانی آزاد میشود که این منطق را در ابزارهای مدرنی مانند n8n به کار بگیریم تا وظایف ساده را به ورکفلوهای هوشمند و پولساز تبدیل کنیم.
کرون جاب (Cron Job) چیست؟ (ترجمه زبان فنی به زبان قدرت)

کرون جاب (Cron Job) را یک تعریف پیچیده در نظر نگیرید. در عمل، Cron یک «موتور زمانبندی» داخلی و قدرتمند در تمام سیستمعاملهای مبتنی بر یونیکس (مانند لینوکس و macOS) است. وظیفه آن یک چیز است: اجرای دستورات یا اسکریپتهای مشخص، در زمانهای از پیش تعیینشده، بدون دخالت انسان.
این سیستم از دو جزء اصلی تشکیل شده که درک رابطه آنها کلید ماجراست:
1. Cron Daemon (یا crond): این را «مغز همیشه بیدار» سیستم در نظر بگیرید. یک فرآیند (Process) که همیشه در پسزمینه سیستمعامل در حال اجراست. کار آن این است که هر دقیقه یک بار از خواب بیدار شود، لیست وظایف را چک کند و ببیند آیا کاری برای انجام دادن در آن دقیقه خاص وجود دارد یا خیر.
2. Crontab (Cron Table): این همان «لیست وظایف دقیق» است. یک فایل متنی ساده که هر کاربر (و حتی خود سیستم) میتواند یکی از آن را داشته باشد. در این فایل، شما مشخص میکنید که *چه دستوری* باید در *چه زمانی* اجرا شود.
رابطه این دو بسیار ساده و خطی است:
`text
┌───────────────┐ ┌────────────────┐ ┌──────────────────┐
│ Cron Daemon │─── هر دقیقه میخواند ───>│ Crontab File │─── در زمان مقرر اجرا میکند ───>│ /path/to/command │
│ (مغز همیشه بیدار) │ │ (لیست وظایف) │ │ (دستور شما) │
└───────────────┘ └────────────────┘ └──────────────────┘
`
در پروژههای واقعی، ما از Cron برای وظایف حیاتی و تکراری استفاده میکنیم: از پشتیبانگیری منظم دیتابیسها و پاکسازی لاگهای قدیمی گرفته تا اجرای اسکریپتهای پردازش داده در ساعات کمترافیک. این ابزار، اولین لایه دفاعی در برابر فراموشی و خطای انسانی در مدیریت سرور است.
تمام ورکفلوهای این مقاله را یکجا دانلود کنید
وقت خود را برای کپی-پیست جداگانه تلف نکنید. فایل JSON هر ۳ سناریوی پولساز + ۲ ورکفلو کاربردی دیگر را همین الان دریافت کنید و مستقیماً در n8n خود ایمپورت کنید.
رمزگشایی سینتکس Crontab در ۵ دقیقه: از * تا /

قدرت Cron در سادگی سینتکس آن نهفته است. هر خط در یک فایل Crontab یک وظیفه را تعریف میکند و از دو بخش اصلی تشکیل شده است: زمانبندی و دستور.
بخش زمانبندی خود از پنج فیلد تشکیل شده که با فاصله (Space) از هم جدا میشوند:
| فیلد | توضیح | مقادیر مجاز |
| :———- | :————– | :————– |
| دقیقه | دقیقه از ساعت | 0-59 |
| ساعت | ساعت از روز | 0-23 (فرمت ۲۴ ساعته) |
| روز ماه | روز از ماه | 1-31 |
| ماه | ماه از سال | 1-12 یا Jan-Dec |
| روز هفته | روز از هفته | 0-7 (0 و 7 هر دو یکشنبه هستند) |
برای تعریف این زمانبندی، از چند عملگر کلیدی استفاده میشود:
* (Wildcard): به معنای “هر”. اگر در فیلد “ساعت” از * استفاده شود، یعنی “هر ساعت”., (List Separator): برای تعریف یک لیست از مقادیر. مثلاً 0,15,30,45 در فیلد “دقیقه” یعنی “در دقایق ۰، ۱۵، ۳۰ و ۴۵”.- (Range Separator): برای تعریف یک بازه. مثلاً 9-17 در فیلد “ساعت” یعنی “از ساعت ۹ صبح تا ۵ بعد از ظهر”./ (Step Operator): برای تعریف گامها یا فواصل زمانی. */15 در فیلد “دقیقه” یعنی “هر ۱۵ دقیقه یک بار”. این معادل 0,15,30,45 است.در ادامه چند مثال کاربردی برای درک بهتر این سینتکس آورده شده است. برای ویرایش Crontab کاربر فعلی، از دستور crontab -e در ترمینال استفاده کنید.
مثال ۱: اجرای یک اسکریپت بکآپ هر شب ساعت ۲:۳۰ بامداد.
`bash
30 2 * * * /usr/bin/php /var/www/my-project/scripts/backup.php
`
30: در دقیقه ۳۰2: در ساعت ۲ بامداد* * *: هر روز از هر ماه از هر روز هفتهمثال ۲: پاکسازی فایلهای temp هر ۱۵ دقیقه.
`bash
*/15 * * * * /bin/rm -f /var/tmp/*
`
*/15: هر ۱۵ دقیقه یکبارمثال ۳: ارسال گزارش هفتگی، فقط در روزهای دوشنبه ساعت ۸ صبح.
`bash
0 8 * * 1 /home/user/scripts/send_weekly_report.sh
`
1: در روز دوشنبه (روز هفته)مثال ۴: اجرای یک دستور فقط در ساعات کاری (دوشنبه تا جمعه، ۹ تا ۱۷) در هر دقیقه.
`bash
`
*: هر دقیقه9-17: از ساعت ۹ تا ۱۷1-5: از دوشنبه تا جمعهنکته حرفهای: ابزارهایی مانند crontab.guru برای تست و تولید آنلاین این عبارات بسیار مفید هستند و ریسک خطا در تنظیمات پیچیده را به شدت کاهش میدهند.
نود Schedule در n8n: مرکز فرماندهی ورکفلوهای شما
نوشتن دستی Crontab روی سرور قدرتمند است، اما محدودیتهایی دارد: مدیریت آن در چندین سرور پیچیده است، رابط کاربری گرافیکی ندارد و اتصال آن به سرویسهای دیگر (مثل ارسال نوتیفیکیشن در Slack یا آپدیت یک ردیف در Google Sheets) نیازمند نوشتن اسکریپتهای اضافی است.
اینجاست که n8n این مفهوم را به سطح بالاتری میبرد. نود Schedule در n8n در واقع یک رابط کاربری پیشرفته و یکپارچه برای همان منطق Cron است که مستقیماً در اکوسیستم ورکفلوهای شما تعبیه شده. این نود به عنوان یک Trigger (ماشه) عمل میکند و به شما اجازه میدهد اجرای هر ورکفلویی را با دقت بالا زمانبندی کنید.
ویژگیهای کلیدی نود Schedule که بازی را عوض میکنند:
Intervals: اجرای ورکفلو در فواصل زمانی مشخص (مثلاً هر ۱۵ دقیقه). این حالت برای کارهایی که نیاز به اجرای مکرر دارند اما زمان دقیق شروع آنها اهمیت کمتری دارد، ایدهآل است.Custom (Cron): این قدرتمندترین حالت است. در این بخش شما میتوانید دقیقاً همان عبارت Cron پنج فیلدی را که یاد گرفتید وارد کنید و از تمام قدرت سینتکس آن بهرهمند شوید.مثال ورکفلو ساده: ارسال پیام به تلگرام هر ۵ دقیقه
این ورکفلو نشان میدهد که چگونه میتوان نود Schedule را به نود Telegram متصل کرد.
1. Trigger (ماشه): یک نود Schedule اضافه کنید.
2. تنظیمات: Mode را روی Intervals قرار دهید و زمان را روی ۵ دقیقه تنظیم کنید (یا Custom با عبارت */5 * * * *).
3. Action (عملیات): یک نود Telegram اضافه کرده و آن را به نود Schedule متصل کنید.
4. تنظیمات Telegram: توکن ربات و Chat ID خود را وارد کنید و در بخش Text پیامی مانند این یک پیام تست زمانبندی شده از n8n است. بنویسید.
5. فعالسازی: ورکفلو را Active کنید.
از این پس، هر ۵ دقیقه یکبار این ورکفلو به صورت خودکار اجرا شده و پیام مورد نظر به تلگرام شما ارسال خواهد شد.
در زیر، کد JSON این ورکفلو برای Import مستقیم در n8n شما آورده شده است:
`json
{
“name”: “Scheduled Telegram Message”,
“nodes”: [
{
“parameters”: {},
“name”: “Start”,
“type”: “n8n-nodes-base.start”,
“typeVersion”: 1,
“position”: [
250,
300
]
},
{
“parameters”: {
“rule”: {
“interval”: [
{
“field”: “minutes”,
“value”: 5
}
]
}
},
“name”: “Schedule”,
“type”: “n8n-nodes-base.scheduleTrigger”,
“typeVersion”: 1.1,
“position”: [
450,
300
],
“trigger”: true
},
{
“parameters”: {
“chatId”: “YOUR_CHAT_ID”,
“text”: “این یک پیام تست زمانبندی شده از n8n است که هر ۵ دقیقه اجرا میشود.”,
“additionalFields”: {}
},
“name”: “Telegram”,
“type”: “n8n-nodes-base.telegram”,
“typeVersion”: 1.1,
“position”: [
650,
300
],
“credentials”: {
“telegramApi”: {
“id”: “YOUR_CREDENTIAL_ID”,
“name”: “Telegram account”
}
}
}
],
“connections”: {
“Schedule”: {
“main”: [
[
{
“node”: “Telegram”,
“type”: “main”,
“index”: 0
}
]
]
}
},
“active”: false,
“settings”: {},
“id”: “1”
}
`
*توجه: قبل از استفاده، YOUR_CHAT_ID و YOUR_CREDENTIAL_ID را با مقادیر واقعی خود جایگزین کنید.*
۳ سناریوی پولساز با زمانبندی در n8n (کد و ورکفلو آماده)
تئوری کافی است. در تجربه ما، ارزش واقعی اتوماسیون زمانبندیشده در حل مشکلات بیزینسی واقعی نهفته است. در ادامه سه سناریوی عملی که مستقیماً در پروژههای خود پیادهسازی کردهایم، به همراه ورکفلو کامل آنها ارائه میشود.
۱. گزارشگیری خودکار از سرور و ارسال هشدار (پیشگیری بهتر از درمان)
مشکل: تیم DevOps نیاز دارد به صورت مداوم وضعیت منابع سرور (CPU و RAM) را زیر نظر داشته باشد تا قبل از وقوع مشکل و از دسترس خارج شدن سرویس، از آن مطلع شود.
راهکار: یک ورکفلو که هر ساعت، با اجرای یک دستور SSH روی سرور، میزان مصرف منابع را چک کرده و اگر مصرف CPU از ۹۰٪ بیشتر بود، یک هشدار فوری در کانال Slack تیم ارسال میکند.
دیاگرام ورکفلو:
[Schedule: 0 * * * *] --> [Execute Command: ssh top] --> [IF: CPU > 90%] --> [Slack: Send Alert]
ورکفلو JSON:
`json
{
“name”: “Server Health Check & Alert”,
“nodes”: [
{
“parameters”: {
“cronTime”: “0 0 * * *”
},
“name”: “Schedule Midnight”,
“type”: “n8n-nodes-base.scheduleTrigger”,
“typeVersion”: 1.1,
“position”: [
450,
300
],
“trigger”: true
},
{
“parameters”: {
“command”: “ssh user@your-server-ip \”top -bn1 | grep ‘Cpu(s)’ | sed ‘s/.*, *\\([0-9.]*\\)%* id.*/\\1/’ | awk ‘{print 100 – $1}’\””
},
“name”: “Get CPU Usage”,
“type”: “n8n-nodes-base.executeCommand”,
“typeVersion”: 1,
“position”: [
650,
300
]
},
{
“parameters”: {
“conditions”: {
“number”: [
{
“value1”: “{{$json.stdout}}”,
“operation”: “larger”,
“value2”: 90
}
]
}
},
“name”: “IF CPU > 90%”,
“type”: “n8n-nodes-base.if”,
“typeVersion”: 1,
“position”: [
850,
300
]
},
{
“parameters”: {
“channel”: “devops-alerts”,
“text”: “🚨 هشدار مصرف بالای CPU!\n\nسرور your-server-ip در وضعیت بحرانی قرار دارد.\nمصرف فعلی CPU: {{$node['Get CPU Usage'].json.stdout}}%“
},
“name”: “Send Slack Alert”,
“type”: “n8n-nodes-base.slack”,
“typeVersion”: 1.1,
“position”: [
1050,
200
],
“credentials”: {
“slackApi”: {
“id”: “YOUR_SLACK_CREDENTIAL_ID”,
“name”: “Slack account”
}
}
}
],
“connections”: {
“Schedule Midnight”: {
“main”: [
[
{
“node”: “Get CPU Usage”,
“type”: “main”,
“index”: 0
}
]
]
},
“Get CPU Usage”: {
“main”: [
[
{
“node”: “IF CPU > 90%”,
“type”: “main”,
“index”: 0
}
]
]
},
“IF CPU > 90%”: {
“main”: [
[
{
“node”: “Send Slack Alert”,
“type”: “main”,
“index”: 0
}
]
]
}
},
“active”: false,
“settings”: {},
“id”: “2”
}
`
*توجه: دستور SSH و اطلاعات Credential را مطابق با محیط خود تنظیم کنید.*
۲. همگامسازی دیتابیس از یک API خارجی (تضمین صحت دادهها)
مشکل: نیاز است که لیست محصولات از یک API تامینکننده، هر ۶ ساعت یکبار دریافت و در دیتابیس PostgreSQL داخلی برای استفاده در وبسایت، بهروزرسانی شود تا موجودی و قیمتها همیشه دقیق باشند.
راهکار: یک ورکفلو که هر ۶ ساعت یکبار اجرا میشود، با یک درخواست HTTP GET لیست محصولات را از API میگیرد، دادهها را با نود Set برای تطبیق با اسکیمای دیتابیس فرمت میکند و سپس در جدول products دیتابیس PostgreSQL وارد (Insert/Update) میکند.
دیاگرام ورکفلو:
[Schedule: */6 * * *] --> [HTTP Request: Get Products] --> [Set: Format Data] --> [Postgres: Insert/Update Data]
ورکفلو JSON:
`json
{
“name”: “Sync Products from API to Postgres”,
“nodes”: [
{
“parameters”: {
“cronTime”: “0 */6 * * *”
},
“name”: “Schedule Every 6 Hours”,
“type”: “n8n-nodes-base.scheduleTrigger”,
“typeVersion”: 1.1,
“position”: [
450,
300
],
“trigger”: true
},
{
“parameters”: {
“url”: “https://api.supplier.com/v1/products”,
“options”: {}
},
“name”: “Get Products from API”,
“type”: “n8n-nodes-base.httpRequest”,
“typeVersion”: 3,
“position”: [
650,
300
]
},
{
“parameters”: {
“operation”: “upsert”,
“table”: “products”,
“columns”: “name,sku,price,stock”,
“conflictColumns”: “sku”,
“options”: {}
},
“name”: “Upsert to Postgres”,
“type”: “n8n-nodes-base.postgres”,
“typeVersion”: 1.3,
“position”: [
1050,
300
],
“credentials”: {
“postgres”: {
“id”: “YOUR_POSTGRES_CREDENTIAL_ID”,
“name”: “Postgres account”
}
}
},
{
“parameters”: {
“values”: {
“string”: [
{
“name”: “name”,
“value”: “={{$json.productName}}”
},
{
“name”: “sku”,
“value”: “={{$json.productSKU}}”
}
],
“number”: [
{
“name”: “price”,
“value”: “={{$json.price}}”
},
{
“name”: “stock”,
“value”: “={{$json.inventoryCount}}”
}
]
},
“options”: {}
},
“name”: “Map Data Fields”,
“type”: “n8n-nodes-base.set”,
“typeVersion”: 1.2,
“position”: [
850,
300
]
}
],
“connections”: {
“Schedule Every 6 Hours”: {
“main”: [
[
{
“node”: “Get Products from API”,
“type”: “main”,
“index”: 0
}
]
]
},
“Get Products from API”: {
“main”: [
[
{
“node”: “Map Data Fields”,
“type”: “main”,
“index”: 0
}
]
]
},
“Map Data Fields”: {
“main”: [
[
{
“node”: “Upsert to Postgres”,
“type”: “main”,
“index”: 0
}
]
]
}
},
“active”: false,
“settings”: {},
“id”: “3”
}
`
۳. مدیریت کمپین خوشامدگویی ایمیل (افزایش نرخ تبدیل کاربر جدید)
مشکل: هر کاربر جدیدی که در CRM ثبتنام میکند، باید به صورت خودکار به کمپین ایمیل خوشامدگویی در پلتفرم MailerLite اضافه شود تا فرآیند Onboarding او بلافاصله آغاز گردد و اولین ارزش محصول را تجربه کند.
راهکار: یک ورکفلو که هر روز صبح ساعت ۱۰ اجرا میشود، لیست کاربرانی که در ۲۴ ساعت گذشته در HubSpot ثبتنام کردهاند را میخواند و سپس آنها را به گروه مشخصی در MailerLite اضافه میکند.
دیاگرام ورکفلو:
[Schedule: 0 10 * * *] --> [HubSpot: Get New Contacts] --> [Loop Over Items] --> [MailerLite: Add Subscriber to Group]
ورکفلو JSON:
`json
{
“name”: “Onboard New Users to MailerLite”,
“nodes”: [
{
“parameters”: {
“cronTime”: “0 10 * * *”
},
“name”: “Schedule 10 AM Daily”,
“type”: “n8n-nodes-base.scheduleTrigger”,
“typeVersion”: 1.1,
“position”: [
450,
300
],
“trigger”: true
},
{
“parameters”: {
“resource”: “contact”,
“operation”: “getAll”,
“limit”: 100,
“filters”: {
“filterGroups”: [
{
“filters”: [
{
“propertyName”: “createdate”,
“operator”: “GTE”,
“value”: “={{$now.minus({days: 1}).toMillis()}}”
}
]
}
]
},
“options”: {}
},
“name”: “Get New HubSpot Contacts”,
“type”: “n8n-nodes-base.hubspot”,
“typeVersion”: 1,
“position”: [
650,
300
],
“credentials”: {
“hubspotApi”: {
“id”: “YOUR_HUBSPOT_CREDENTIAL_ID”,
“name”: “Hubspot account”
}
}
},
{
“parameters”: {
“groupId”: “YOUR_MAILERLITE_GROUP_ID”,
“email”: “={{$json.properties.email}}”,
“fields”: {
“fields”: [
{
“key”: “name”,
“value”: “={{$json.properties.firstname}}”
},
{
“key”: “lastname”,
“value”: “={{$json.properties.lastname}}”
}
]
},
“options”: {}
},
“name”: “Add to MailerLite Group”,
“type”: “n8n-nodes-base.mailerLite”,
“typeVersion”: 1,
“position”: [
850,
300
],
“credentials”: {
“mailerLiteApi”: {
“id”: “YOUR_MAILERLITE_CREDENTIAL_ID”,
“name”: “MailerLite account”
}
}
}
],
“connections”: {
“Schedule 10 AM Daily”: {
“main”: [
[
{
“node”: “Get New HubSpot Contacts”,
“type”: “main”,
“index”: 0
}
]
]
},
“Get New HubSpot Contacts”: {
“main”: [
[
{
“node”: “Add to MailerLite Group”,
“type”: “main”,
“index”: 0
}
]
]
}
},
“active”: false,
“settings”: {},
“id”: “4”
}
`
نتیجهگیری: از یک دستور ساده تا یک اکوسیستم اتوماسیون کامل
تسلط بر Cron Job یک مهارت بنیادی و غیرقابل انکار برای هر متخصص فنی، از مدیر سیستم تا توسعهدهنده بکاند است. این ابزار، ستون فقرات اجرای وظایف زمانبندیشده در سطح سیستمعامل است و درک عمیق آن به شما کنترل کاملی بر سرورهایتان میدهد.
اما قدرت واقعی زمانی آزاد میشود که این منطق زمانبندی، از یک دستور تنها در خط فرمان، به ماشه و آغازگر یک ورکفلوی پیچیده و چندمرحلهای در بستری مانند n8n تبدیل شود. نود Schedule در n8n، روح Cron را گرفته و به آن دست و پا میدهد؛ دستهایی برای اتصال به صدها API و پاهایی برای حرکت در مسیرهای منطقی و شرطی.
شما دیگر یک اسکریپت ساده را زمانبندی نمیکنید؛ شما در حال زمانبندی یک فرآیند بیزینسی کامل هستید. از نظارت بر زیرساختها و همگامسازی دادهها گرفته تا مدیریت ارتباط با مشتریان. این گذار از یک *دستور* ساده به یک *اکوسیستم اتوماسیون* کامل، همان جایی است که ارزش واقعی مهندسی و تفکر سیستمی، خود را نشان میدهد.
—
اتوماسیون شما پیچیدهتر از این حرفهاست؟
سناریوهای بالا نقطه شروع خوبی هستند. اما وقتی پای یکپارچهسازیهای حیاتی، مدیریت خطا و مقیاسپذیری به میان میآید، تجربه حرف اول را میزند. بیایید در یک جلسه ۱۵ دقیقهای رایگان، پتانسیل اتوماسیون در کسبوکار شما را بررسی کنیم.
