نود Execute Command در N8N

نود Execute Command در N8N

نود Execute Command به شما اجازه می‌دهد از داخل یک ورکفلو در n8n، فرمان‌های سیستم‌عامل (Linux/Windows/macOS) را اجرا کنید؛ مثل اجرای اسکریپت‌ها، کار با فایل‌ها، اجرای ابزارهای CLI، یا گرفتن خروجی دستورها برای پردازش و ارسال به سرویس‌های دیگر. این نود وقتی ارزشمند می‌شود که بخواهید اتوماسیون n8n را به ابزارها و قابلیت‌های سطح سیستم متصل کنید.

معرفی نود در N8N

نود Execute Command یک نود عملیاتی برای اجرای دستورهای شِل/ترمینال روی ماشینی است که n8n روی آن اجرا می‌شود (یا داخل کانتینر Docker مربوط به n8n). شما یک فرمان می‌دهید، نود آن را اجرا می‌کند و خروجی (stdout/stderr و کد خروج) را به‌عنوان داده به مراحل بعدی ورکفلو تحویل می‌دهد.

  • کارکرد: اجرای یک Command و دریافت خروجی آن در n8n
  • دسته‌بندی: Action (عملیاتی)
  • اهمیت در ورکفلوها: اتصال دنیای اتوماسیون n8n به ابزارهای خط فرمان (مثل ffmpeg، git، curl، python، node، awk/sed) و انجام کارهایی که با نودهای آماده یا APIها به‌سختی انجام می‌شوند.

موارد استفاده

1) اجرای اسکریپت‌های داخلی پروژه

مثلاً هر شب یک اسکریپت Python برای پاکسازی داده‌ها اجرا شود و نتیجه به Slack ارسال شود.

  • Workflow نمونه: Cron → Execute Command (python script) → IF (بر اساس exit code) → Slack/Email

2) پردازش فایل‌ها و رسانه

اگر فایل صوتی/ویدئویی از یک سرویس دریافت می‌کنید، می‌توانید با ffmpeg آن را تبدیل کنید و نتیجه را آپلود کنید.

  • Workflow نمونه: Google Drive Trigger → Download → Execute Command (ffmpeg) → Upload to S3

3) کار با Git یا ابزارهای DevOps

برای سناریوهای CI/CD سبک، می‌توان برخی فرمان‌ها مثل pull، build، یا اجرای تست‌ها را انجام داد (با احتیاط امنیتی).

  • Workflow نمونه: Webhook (deploy) → Execute Command (git pull && npm install && npm test) → Telegram

4) خواندن وضعیت سیستم و مانیتورینگ ساده

گرفتن وضعیت دیسک، رم، یا سرویس‌ها و ارسال هشدار.

  • Workflow نمونه: Cron → Execute Command (df -h) → Function (تحلیل) → Email alert

5) ترکیب با نودهای دیگر برای ورکفلوهای عملی

  • Execute Command + HTTP Request: تولید یک فایل خروجی با CLI و سپس ارسال به یک API
  • Execute Command + Read/Write Binary File: ساخت/ویرایش فایل در دیسک و سپس خواندن/ارسال آن
  • Execute Command + IF: تصمیم‌گیری بر اساس exit code یا متن خروجی
  • Execute Command + Split In Batches: اجرای دستور روی مجموعه‌ای از آیتم‌ها (مثلاً پردازش چند فایل)

پارامترها و تنظیمات

فیلدهای اصلی این نود ممکن است بسته به نسخه n8n کمی متفاوت نمایش داده شوند، اما منطق عمومی ثابت است: تعیین فرمان، ورودی‌ها/محیط اجرا، و نحوه دریافت خروجی.

Command

  • نام پارامتر: Command
  • نوع داده: String
  • توضیح: دستور/فرمانی که باید اجرا شود. می‌تواند شامل آرگومان‌ها باشد.
  • مثال عملی (Linux/macOS): ls -la /data
  • مثال عملی (Windows): dir C:temp

نکته مهم: این دستور روی همان محیطی اجرا می‌شود که n8n در آن قرار دارد. اگر n8n در Docker است، مسیرها و ابزارها باید داخل همان کانتینر در دسترس باشند.

Arguments / Parameters (در صورت وجود در UI نسخه شما)

  • نام پارامتر: Arguments (یا مشابه)
  • نوع داده: Array/String
  • توضیح: جدا کردن آرگومان‌ها از خود فرمان برای کنترل بهتر و کاهش خطاهای quoting
  • مثال: Command: python3 و Arguments: ["/scripts/report.py","--date","2026-02-21"]

Working Directory (cwd)

  • نام پارامتر: Working Directory
  • نوع داده: String
  • توضیح: مسیر پوشه‌ای که دستور از آنجا اجرا می‌شود. برای پروژه‌هایی که به فایل‌های نسبی نیاز دارند بسیار مهم است.
  • مثال: /home/node/app یا داخل Docker: /files

اگر Working Directory اشتباه باشد، دستورهایی مثل npm یا git ممکن است فایل‌های مورد انتظار را پیدا نکنند.

Environment Variables

  • نام پارامتر: Environment Variables
  • نوع داده: Key/Value
  • توضیح: تعریف متغیر محیطی برای همان اجرای دستور (مثل API_KEY، PATH، MODE)
  • مثال: MODE=production و API_TOKEN={{$json.token}}

برای اطلاعات حساس بهتر است از Credentials/Secrets سطح n8n و متغیرهای محیطی سرور استفاده شود و از قرار دادن مستقیم توکن داخل Command پرهیز شود.

Input (stdin) / Pipe Input (در صورت پشتیبانی)

  • نام پارامتر: Input
  • نوع داده: String
  • توضیح: ارسال متن به ورودی استاندارد برنامه (stdin). برای ابزارهایی که از pipe پشتیبانی می‌کنند مفید است.
  • مثال: Command: python3 -c "import sys; print(sys.stdin.read().upper())" و Input: {{ $json.text }}

Timeout

  • نام پارامتر: Timeout
  • نوع داده: Number (ms یا seconds بسته به نسخه)
  • توضیح: جلوگیری از گیر کردن ورکفلو هنگام اجرای دستورهای طولانی یا هنگ‌کرده
  • مثال: 60000 (یک دقیقه)

Return Output / Output Format

  • نام پارامتر: Return Output (یا مشابه)
  • نوع داده: Boolean / Option
  • توضیح: تعیین اینکه stdout/stderr برگردانده شود یا نه، و گاهی نحوه بازگشت (text/json)
  • مثال: فعال باشد تا stdout برای پردازش بعدی برگردد

Continue On Fail (تنظیم سطح نود)

  • نام پارامتر: Continue On Fail
  • نوع داده: Boolean
  • توضیح: اگر دستور خطا داد (exit code غیر صفر)، به‌جای متوقف کردن کل ورکفلو، اجازه ادامه می‌دهد تا خودتان خطا را مدیریت کنید.
  • مثال: برای گرفتن stderr و ارسال گزارش خطا به ایمیل

نکات مهم هنگام پیکربندی

  • امنیت: هر چیزی که در Command اجرا می‌شود، عملاً دسترسی اجرای کد روی سرور n8n است. ورودی‌های کاربر را مستقیم وارد Command نکنید (خطر Command Injection).
  • محیط اجرا: اگر n8n داخل Docker است، ابزارهایی مثل python یا ffmpeg باید داخل ایمیج نصب شده باشند.
  • مسیرها: از مسیرهای مطلق استفاده کنید یا Working Directory را دقیق تنظیم کنید.
  • Quoting: برای متن‌های شامل فاصله و کاراکترهای خاص، quoting درست (single/double quotes) و escape را رعایت کنید.

ورودی‌ها و خروجی‌ها

ورودی (Input)

این نود از آیتم‌های ورودی n8n استفاده می‌کند تا بتوانید با Expressionها داخل Command/Environment/Input مقادیر داینامیک قرار دهید. معمولاً از {{$json}} و فیلدهای آن استفاده می‌شود.

نمونه ورودی:

{  "filePath": "/files/invoice-1023.pdf",  "customerId": 55,  "token": "xxxx"}

خروجی (Output)

خروجی معمولاً شامل متن خروجی استاندارد (stdout)، متن خطا (stderr) و کد خروج (exit code) است. ساختار دقیق می‌تواند نسخه‌به‌نسخه فرق کند، اما شکل رایج به‌صورت زیر است:

{  "exitCode": 0,  "stdout": "total 8n-rw-r--r-- 1 node node 1234 Feb 21 10:00 test.txtn",  "stderr": ""}
  • exitCode: اگر 0 باشد یعنی موفق. غیر صفر یعنی خطا/هشدار (بسته به ابزار)
  • stdout: خروجی اصلی دستور
  • stderr: خروجی خطاها/هشدارها

نکات پیشرفته و ترفندها

۱) جلوگیری از Command Injection

اگر بخشی از Command از داده‌های ورودی می‌آید (مثلاً از Webhook)، آن را بدون اعتبارسنجی وارد دستور نکنید. الگوهای امن‌تر:

  • استفاده از لیست مجاز (Allowlist) برای نام فایل‌ها/عملیات
  • تبدیل ورودی به پارامترهای کنترل‌شده (مثلاً فقط عدد یا شناسه)
  • در صورت امکان، استفاده از Arguments جداگانه به‌جای ساختن یک رشته بزرگ Command

۲) پردازش خروجی JSON

اگر ابزار CLI خروجی JSON می‌دهد (یا می‌توانید با گزینه‌ای مثل --json فعالش کنید)، خروجی را در نود بعدی به JSON تبدیل کنید:

  • Execute Command: somecli status --json
  • Node بعدی (Function یا JSON Parse در Set/Function): JSON.parse($json.stdout)

۳) اجرای چند دستور پشت‌سرهم

برای اجرای چند فرمان می‌توانید از اپراتورهای شِل استفاده کنید:

  • Linux/macOS: cd /files && ls -la && node app.js
  • نکته: اگر یکی از مراحل شکست بخورد، با && مراحل بعدی اجرا نمی‌شوند. برای اجرای مستقل می‌توان از ; استفاده کرد.

۴) مدیریت اجرای طولانی

  • Timeout را متناسب تنظیم کنید.
  • برای کارهای سنگین، بهتر است کار را به یک سرویس Job Queue یا اسکریپت مستقل بسپارید و فقط وضعیت را از n8n کنترل کنید.

۵) ترکیب پیشرفته: پردازش دسته‌ای فایل‌ها

سناریو: لیستی از مسیر فایل‌ها دارید و می‌خواهید برای هرکدام checksum بگیرید.

  • Node تولید لیست (مثلاً Google Drive list یا Read Binary Files)
  • Split In Batches (مثلاً 10تایی)
  • Execute Command: sha256sum {{$json.filePath}}
  • Merge/Database: ذخیره نتیجه

محدودیت‌ها و خطاها

محدودیت‌ها

  • وابستگی به محیط: اگر ابزار موردنظر روی سرور/کانتینر نصب نباشد، اجرا شکست می‌خورد.
  • دسترسی فایل: n8n باید مجوز خواندن/نوشتن مسیرهای مورد استفاده را داشته باشد.
  • امنیت: اجرای فرمان روی سرور می‌تواند ریسک بالایی داشته باشد، مخصوصاً اگر داده از بیرون (Webhook/فرم/کاربر) وارد شود.
  • پرتابل بودن: دستورهای Linux روی Windows کار نمی‌کنند و بالعکس (نیاز به نسخه‌بندی یا شرط‌گذاری در ورکفلو).

خطاهای رایج و راه‌حل‌ها

  • Command not found
    • علت: ابزار نصب نیست یا PATH در کانتینر/سیستم درست نیست.
    • راه‌حل: نصب ابزار داخل همان محیط n8n، یا تنظیم PATH در Environment Variables، یا استفاده از مسیر کامل باینری مثل /usr/bin/python3.
  • Permission denied
    • علت: دسترسی اجرا/خواندن/نوشتن ندارید.
    • راه‌حل: بررسی مالکیت فایل‌ها، مجوزها (chmod)، و کاربر اجرای n8n. در Docker، volume permissions را بررسی کنید.
  • No such file or directory
    • علت: مسیر اشتباه یا فایل داخل کانتینر وجود ندارد.
    • راه‌حل: از مسیر مطلق استفاده کنید، Working Directory را تنظیم کنید، و مطمئن شوید فایل واقعاً داخل محیط n8n است.
  • Exit code غیر صفر بدون stderr واضح
    • علت: برخی ابزارها پیام خطا را در stdout می‌نویسند یا خطا را خلاصه گزارش می‌کنند.
    • راه‌حل: stdout و stderr را هر دو لاگ کنید، دستور را دستی در همان سرور اجرا کنید، و سوییچ verbose مثل -v را فعال کنید.
  • مشکلات quoting و فاصله‌ها
    • علت: مسیرهایی با فاصله یا کاراکترهای خاص.
    • راه‌حل: مسیر را داخل کوتیشن قرار دهید، یا از Arguments جداگانه استفاده کنید.

ایده ها

  • ساخت یک ربات تبدیل فایل: دریافت فایل از Telegram، تبدیل با ffmpeg یا libreoffice، و ارسال خروجی
  • سیستم گزارش‌گیری خودکار: اجرای اسکریپت SQL/CLI، تولید CSV، و ارسال به Email یا Google Sheets
  • مانیتورینگ ساده سرور: اجرای دستورهای بررسی دیسک/رم و ارسال هشدار در صورت عبور از آستانه
  • اتوماسیون DevOps سبک: pull از git، اجرای تست، و اطلاع‌رسانی نتیجه در Slack
  • پاکسازی دوره‌ای: حذف فایل‌های قدیمی از یک پوشه با سیاست مشخص و ثبت گزارش در دیتابیس

منابع و مستندات اصلی

دسته بندی: N8N برچسب ها:

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

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

5 × یک =