نود 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
- پاکسازی دورهای: حذف فایلهای قدیمی از یک پوشه با سیاست مشخص و ثبت گزارش در دیتابیس
