| ncftpspooler(1) | General Commands Manual | ncftpspooler(1) |
نام (NAME)
ncftpspooler - دیمن پردازش پسزمینه صف کارهای FTP
خلاصه دستور (SYNOPSIS)
ncftpspooler -d [گزینهها]
ncftpspooler -l [گزینهها]
گزینهها (OPTIONS)
فلگهای خط فرمان:
- -d
- آغاز پردازش پسزمینه کارهای FTP در دایرکتوری تعیینشده برای صف کارهای FTP.
- -q XX
- استفاده از این گزینه برای تعیین دایرکتوری مورد نظر به عنوان صف کارهای FTP به جای دایرکتوری پیشفرض، /var/spool/ncftp.
- -o XX
- استفاده از این گزینه برای تعیین نام فایل گزارش (log). به طور پیشفرض (و تا حدی نامناسب) برنامه فقط از فایلی با نام log در دایرکتوری صف کارها استفاده میکند. اگر نیازی به ثبت گزارش ندارید، با این گزینه مقدار /dev/null را مشخص کنید.
- -l
- فهرست کردن محتویات دایرکتوری صف کارها.
- -s XX
- هنگامی که صف کارها خالی است، برنامه ۱۲۰ ثانیه در حالت خواب میماند و سپس دوباره بررسی میکند تا ببیند آیا کار جدیدی ثبت شده است یا خیر. با این گزینه میتوانید تعداد ثانیههای این تاخیر را تغییر دهید.
توضیحات (DESCRIPTION)
برنامه ncftpspooler بر پایه برنامه ncftpbatch توسعه یافته است. برنامه ncftpbatch در ابتدا به عنوان یک «اسپولر شخصی FTP» طراحی شده بود که یک کار پسزمینه را برای کاربری مشخص پردازش میکرد و پس از اتمام خارج میشد؛ اما برنامه ncftpspooler یک «اسپولر سراسری FTP» است که همیشه در حال اجرا میماند و کارهای پسزمینه را به محض ارسال و ثبت پردازش میکند.
دایرکتوری صف کارها برای فایلهای متنی با نامگذاری و قالببندی ویژه پایش میشود. هر فایل به عنوان یک کار FTP عمل میکند. نام فایل کار شامل نوع کار FTP (get یا put)، یک برچسب زمانی که نشاندهنده زودترین زمان ممکن برای پردازش کار است، و به صورت اختیاری برخی اطلاعات تکمیلی برای تسهیل ایجاد فایلهای کار یکتا (مانند یک شماره ترتیبی) است. محتوای فایلهای کار شامل اطلاعاتی نظیر ماشین سرور مقصد برای اتصال FTP، نام کاربری، گذرواژه، مسیر راه دور و موارد دیگر است.
دایرکتوری صف کارهای شما باید برای کاربری که قصد دارید ncftpspooler را با آن اجرا کنید دارای مجوز خواندن و نوشتن باشد تا بتواند فایلهای کار را در صف حذف کرده یا تغییر نام دهد.
مهمتر از آن، کاربری که برنامه را اجرا میکند باید دسترسیهای کافی برای دسترسی به فایلهای محلی مرتبط با انتقال FTP را داشته باشد. برای نمونه، اگر قرار است اسپولر کارهایی را پردازش کند که فایلها را روی سرورهای دوردست بارگذاری (upload) میکنند، این کاربر نیازمند مجوز خواندن روی فایلهای محلی است که باید بارگذاری شوند (و همچنین مجوز دسترسی به دایرکتوریهای والد آنها). به همین ترتیب، اگر اسپولر قرار است کارهای بارگیری (download) فایلها را پردازش کند، کاربر باید بتواند در دایرکتوریهای محلی بنویسد.
پس از آنکه دایرکتوری اسپول خود را با مجوزها و مالکیت مناسب ایجاد کردید، میتوانید دستور ncftpspooler -d را برای راهاندازی دیمن اسپولر اجرا کنید. اگر میخواهید بیش از یک کار FTP را به طور همزمان از همان دایرکتوری صف کارها پردازش کنید، میتوانید اسپولرهای بیشتری را اجرا کنید. سپس میتوانید فایل گزارش را (برای نمونه با دستور tail -f ) پایش کنید تا روند پیشرفت اسپولر را پیگیری نمایید. در بیشتر مواقع اسپولر کاری انجام نخواهد داد، مگر اینکه فایلهای کاری در دایرکتوری صف کارها ظاهر شوند.
نامگذاری فایلهای کار (JOB FILE NAMES)
هنگامی که برنامه ncftpspooler دایرکتوری صف کارها را پایش میکند، تمام فایلهایی را که از قواعد نامگذاری فایلهای کار پیروی نمیکنند نادیده میگیرد. فایلهای کار باید دارای پیشوندی با قالب X-YYYYMMDD-hhmmss باشند که در آن: X نشاندهنده نوع کار است، YYYY سال چهاررقمی، MM شماره دورقمی ماه، DD روز دورقمی ماه، hh ساعت دورقمی شبانهروز (00-23)، mm دقیقه دورقمی، و ss ثانیه دورقمی است. تاریخ و زمان نشاندهنده زودترین زمانی است که میخواهید کار اجرا شود.
نوع کار میتواند g برای get (بارگیری از میزبان راه دور) یا p برای put (بارگذاری به میزبان راه دور) باشد.
به عنوان مثال، اگر میخواهید بارگذاری در ساعت ۲۳:۴۵ روز ۷ دسامبر ۲۰۰۱ انجام شود، نام فایل کار میتواند به این صورت باشد:
p-20011207-234500
در عمل، فایلهای کار شامل اطلاعات تکمیلی نظیر شماره ترتیبی یا شناسه فرایند (PID) نیز میشوند. این کار ایجاد نامهای یکتا برای فایلهای کار را آسانتر میکند. در ادامه همان مثال، همراه با شناسه فرایند و شماره ترتیبی آورده شده است:
p-20011207-234500-1234-2
هنگام ارسال فایلهای کار به دایرکتوری صف، در صورت افزودن دادههای اضافی به نام فایل کار، حتماً بعد از بخش hhmmss از نویسه خط تیره (-) استفاده کنید.
محتوای فایلهای کار (JOB FILE CONTENTS)
فایلهای کار، فایلهای متنی معمولی هستند و میتوان آنها را به صورت دستی ایجاد کرد. هر خط فایل یک جفت کلید-مقدار با قالب variable=value، یا یک خط توضیحات که با نویسه هش (#) شروع میشود، یا یک خط خالی است. در ادامه نمونهای از یک فایل کار آورده شده است:
# This is a NcFTP spool file entry. job-name=g-20011016-100656-008299-1 op=get hostname=ftp.freebsd.org xtype=I passive=1 remote-dir=pub/FreeBSD local-dir=/tmp remote-file=README.TXT local-file=readme.txt
فایلهای کار انعطافپذیر هستند زیرا از قالبی ساده پیروی میکنند و پیشنیازهای اندکی دارند، اما چند پارامتر اجباری وجود دارد که برای پردازش کار توسط اسپولر باید حتماً درج شوند.
- op
- عملیات (نوع کار) مورد نظر. مقادیر معتبر عبارتند از get و put.
- hostname
- میزبان راه دور برای اتصال FTP. این مقدار میتواند یک نشانی IP یا یک نام DNS (مانند ftp.example.com) باشد.
برای یک کار معمولی get، این پارامترها الزامی هستند:
- remote-file
- مسیر فایلی که باید از سرور راه دور بارگیری شود.
- local-file
- مسیری که روی سرور محلی برای فایل بارگیریشده استفاده میشود.
برای یک کار معمولی put، این پارامترها الزامی هستند:
- local-file
- مسیر فایلی که باید در سرور راه دور بارگذاری شود.
- remote-file
- مسیری که روی سرور راه دور برای فایل بارگذاریشده استفاده میشود.
برای یک کار بازگشتی (recursive) get، این پارامترها الزامی هستند:
- remote-file
- مسیر فایل یا دایرکتوری که باید از سرور راه دور بارگیری شود.
- local-dir
- مسیر دایرکتوری روی سرور محلی برای قرارگیری موارد بارگیریشده.
برای یک کار بازگشتی (recursive) put، این پارامترها الزامی هستند:
- local-file
- مسیر فایل یا دایرکتوری که باید در سرور راه دور بارگذاری شود.
- remote-dir
- مسیر دایرکتوری روی سرور راه دور برای قرارگیری موارد بارگذاریشده.
بقیه پارامترها اختیاری هستند. اسپولر در صورت نیاز تلاش میکند مقادیر پیشفرض منطقی برای این پارامترها به کار گیرد.
- user
- نام کاربری برای ورود به سرور راه دور. مقدار پیشفرض برای دسترسی مهمان «anonymous» است.
- pass
- گذرواژه مورد استفاده همراه با نام کاربری برای ورود به سرور راه دور.
- acct
- حساب کاربری مورد استفاده همراه با نام کاربری برای ورود به سرور راه دور. نیاز به مشخص کردن این پارامتر بسیار نادر است.
- port
- شماره پورت برای اتصال به سرور راه دور. مقدار پیشفرض، پورت استاندارد FTP یعنی ۲۱ است.
- host-ip
- نشانی IP مورد استفاده همراه با نام میزبان راه دور برای اتصال به سرور راه دور. این پارامتر میتواند به جای پارامتر hostname استفاده شود، اما درج یکی از این دو الزامی است. این پارامتر معمولاً همراه با پارامتر hostname به عنوان اطلاعات تکمیلی قرار میگیرد.
- xtype
- نوع انتقال مورد استفاده. پیشفرض، نوع انتقال باینری (TYPE I) است. مقادیر معتبر عبارتند از I برای باینری، و A برای متن ASCII.
- passive
- تعیین استفاده از اتصالات داده مجهول FTP (PASV) یا اتصالات داده فعال FTP (PORT). مقادیر معتبر عبارتند از 0 برای فعال، 1 برای مجهول، یا 2 برای تلاش با حالت مجهول و در صورت ناموفق بودن برگشت به حالت فعال. مقدار پیشفرض 2 است.
- recursive
- برای انتقال کامل درختهای دایرکتوری به کار میرود. به طور پیشفرض، تنها یک فایل تکی منتقل میشود. مقادیر معتبر yes یا no هستند.
- delete
- برای حذف فایل منبع در ماشین مبدا پس از انتقال موفقیتآمیز فایل به ماشین مقصد استفاده میشود. به طور پیشفرض، فایلهای منبع حذف نمیشوند. مقادیر معتبر yes یا no هستند.
- job-name
- این پارامتر توسط خود برنامه استفاده نمیشود، اما میتواند توسط ابزاری که فایلهای کار را به صورت خودکار تولید میکند به کار رود. برای نمونه، هنگام استفاده از گزینه -bbb همراه با ncftpput، یک فایل کار در خروجی استاندارد تولید میشود که دارای پارامتر job-name است تا بتوانید به راحتی فایل را با همان نام پیشنهادی به دایرکتوری صف کارها کپی کنید.
- pre-ftp-command
- post-ftp-command
- این پارامترها متناظر با گزینههای -W و -Y در ncftpget و ncftpput هستند. توجه به این نکته ضروری است که این دستورات به دستورات پروتکل انتقال فایل RFC959 اشاره دارند و نه دستورات پوسته (shell) و نه دستوراتی که در محیط /usr/bin/ftp یا ncftp اجرا میشوند.
- pre-shell-command
- post-shell-command
- این پارامترها قلابهایی (hooks) فراهم میکنند تا بتوانید هنگام پردازش یک مورد توسط اسپولر، یک برنامه سفارشی را اجرا کنید. مقادیر معتبر، مسیرهای اسکریپتها یا برنامههای اجرایی هستند. توجه داشته باشید که این مقدار نباید شامل آرگومانهای خط فرمان باشد؛ اگر به آرگومان نیاز دارید، یک اسکریپت شل بسازید و برنامه خود را با آرگومانهای خط فرمان مورد نیاز درون آن فراخوانی کنید.
به طور کلی، post-shell-command بسیار مفیدتر از pre-shell-command است؛ زیرا اگر نیاز به استفاده از این گزینهها داشته باشید، احتمالاً مایلید کاری را پس از اتمام انتقال FTP انجام دهید تا قبل از آن. به عنوان مثال، ممکن است بخواهید یک اسکریپت شل را اجرا کنید که با ارسال پیامی به مدیر سیستم اطلاع دهد بارگیری فایل ۳۷ گیگابایتی او به پایان رسیده است.
هنگامی که برنامه سفارشی شما اجرا میشود، محتوای فایل کار را در ورودی استاندارد (یعنی چند خط از جفتهای کلید-مقدار variable=value) و همچنین دادههای اضافی که اسپولر ممکن است فراهم کند دریافت میکند؛ نظیر جفت کلید-مقدار result با توصیف متنی وضعیت اتمام کار.
در ادامه نمونهای از یک اسکریپت Perl آورده شده است که نشان میدهد چگونه یک post-shell-command یک فایل گزارش به نام /var/log/ncftp_spooler.log را بهروزرسانی میکند.
#!/usr/bin/perl -w
my ($line);
my (%params) = ();
while (defined($line = <STDIN>)) {
$params{$1} = $2
if ($line =~ /^([^=\#\s]+)=(.*)/);
}
if ((defined($params{"result"})) &&
($params{"result"} =~ /^Succeeded/))
{
open(LOG, ">> /var/log/ncftp_spooler.log")
or exit(1);
print LOG "DOWNLOAD" if ($params{"op"} eq "get");
print LOG "UPLOAD" if ($params{"op"} eq "put");
print LOG " ", $params{"local-file"}, "\n";
close(LOG);
}
عیبیابی (DIAGNOSTICS)
برای بررسی اینکه آیا فرایندی از ncftpspooler به طور فعال در حال انجام کارها است یا خیر، باید فایل گزارش بررسی شود. فایل گزارش شامل مقادیر زیادی از اطلاعات مفید است؛ از جمله تمام گفتگوهای اتصال کنترلی FTP بین کلاینت و سرور FTP.
اشکالات (BUGS)
گزینه recursive ممکن است قابل اعتماد نباشد، زیرا ncftpspooler به قابلیتهایی وابسته است که ممکن است در نرمافزار سرور راه دور وجود داشته یا نداشته باشند. علاوه بر این، حتی در صورت وجود این قابلیتها، ncftpspooler ممکن است نیاز به استفاده از روشهای ابتکاری (heuristics) داشته باشد که نمیتوان آنها را ۱۰۰٪ دقیق دانست. بنابراین بهتر است برای هر فایل در درخت دایرکتوری کارهای جداگانه ایجاد کنید، به جای اینکه از یک کار بازگشتی دایرکتوری تکی استفاده نمایید.
برای عملکرد صحیح قابلیت ازسرگیری بارگیریها (resumption)، سرور راه دور باید از دستورات پایهای SIZE و MDTM در FTP پشتیبانی کند. اکثر نرمافزارهای مدرن سرور FTP این امکان را دارند، اما هنوز تعدادی از پیادهسازیهای بسیار ساده ftpd وجود دارند که از این قابلیتها پشتیبانی نمیکنند. در این موارد، ncftpspooler هر بار کل فایل را از ابتدا دوباره بارگیری میکند تا زمانی که بارگیری موفقیتآمیز باشد.
این برنامه نیاز به بهبود دارد تا کارهایی را که هیچ شانسی برای اتمام موفقیتآمیز ندارند شناسایی کند. هنوز مواردی وجود دارد که در آنها کارها در صف قرار میگیرند و بارها و بارها تکرار میشوند تا زمانی که یک مدیر سیستم هوشیار به صورت دستی کارها را حذف کند.
فایلهای اسپول ممکن است شامل نامهای کاربری و گذرواژههای ذخیرهشده به صورت متن خام (cleartext) باشند. این فایلها نباید برای هیچ کاربری به جز کاربری که برنامه را اجرا میکند قابل خواندن باشند!
نویسنده (AUTHOR)
Mike Gleason, NcFTP Software (http://www.ncftp.com).
همچنین ببینید (SEE ALSO)
| NcFTP Software | ncftpspooler |