راهنما:اجرای ربات در تولسرور
سرورهای تول سرور از تاریخ اول جولای ۲۰۱۴ برای همیشه خاموش شدند، و گروه آزمایشگاه های ویکیمدیا(تول لبز) جایگزین آن شده است. برای کار با لبز به راهنمای کار با لبز مراجعه کنید. اما این آموزش نیز میتواند کمک کننده باشد. |
برای اجرای ربات به کمک تولسرور، چندین روش وجود دارد.
در ابتدا باید برنامه پوتی و فایلهای pywikipedia بر روی سیستم شما نصب شده باشد.
در اولین مرحله باید وارد پوشه pywikipedia شوید برای ورود به فولدر مورد نظر از دستور
cd pywikipedia
استفاده نمایید و در صورتی که قصد بازگشت به root کاربری خود را دارید از دستور
cd ~
استفاده نمایید.
روشهای اجرای فرمان در تولسرور
[ویرایش]- اجرای مستقیم دستور بر روی تول سرور (این روش پیشنهاد نمیشود چون در صورت بستن پنجره برنامه پوتی دستور متوقف میگردد)
- دستور crontab که به شما این قابلیت را میدهد که برای اجرای ربات یا کدهایتان زمان مشخص کنید
- دستور screen که برای اجرای چند فرمان به صورت همزمان کاربرد دارد.
- نکته۱: در تمام روشهای فوق باید قبل از نام فایل پایتون عبارت python یا برنامهٔ اجرا کننده آن فایل بنویسید.(برخلاف کامپیوتر شخصی به خصوص ویندوز که در پنجرهٔ cmd فقط نام فایل را مینوشتید)
- مثال:نمونهٔ دستور میانویکی در محیط سولاریس (سیستم عامل تولسرور)
python interwiki.py -start:A
دستور screen
[ویرایش]دستور screen برای اجرای چندین دستور به صورت همزمان کاربرد دارد و شبیه پنجرهها در برنامه ویندوز یا ابونتو است. این دستور این قابلیت را به کاربر میدهد تا بتواند هر یک از دستورهای اجرایی (رباتها) یا بشها (bash) را به صورت همزمان اجرا کند.[۱]
ساخت پنجره جدید
[ویرایش]برای ساخت screen جدید باید از دستور زیر با S بزرگ استفاده کنید که operation1 نام دلخواه شما هست و به شما در یادآوری دستورهای اجرایی پنجره کمک میکند
screen -S operation1
پس از نوشتن این دستور شما به پنجره operation1 هدایت میشوید که در آنجا میتوانید دستورهای مورد نظر خود را بنویسید.
اگر میخواهید نامی بغیر از بالا باشد میتوانید از دستور زیر استفاده کنید.
screen -S TASKNAME
توجه کنید که S حتما باید بزرگ باشد و TASKNAME نامی است دلخواه که هر جا خواستید با آن میتوانید اسکرین را لود کنید مثلا screen -r TASKNAME یا screen -d TASKNAME که اولی لود میکند دومی کار ذخیره(توضیح در پایین) را انجام میدهد.
ذخیره (detach) پنجره(screen) جدید
[ویرایش]برای اینکه فعالیت اجرایی در پنجره مورد نظر ادامه داشته باشد و با بستن پنجره فعالیت از کار نیافتد باید screen را detach کنید و برای این کار دکمههای Ctrl+A+D را بفشارید تا پنجره (screen) مورد نظر شما ذخیره گردد.
بازخوانی پنجرهها
[ویرایش]برای بازخوانی یا تغییر یا مشاهده فعالیت درون هر پنجره از دستور زیر فهرست screen ها را مشاهده نمایید
screen -r
برای باز کردن هر یک از screen ها با توجه به نامی که قبلا به آنها دادید.عددی جلوی screen را به شکل زیر بنویسید.
screen -r operation1
در این دستور operation1 کد screen مورد نظر بود.
بستن پنجره
[ویرایش]همانطور که می دانید با ذخیره کردن پنجره ربات به کار خود ادامه می دهد. و تا دستور وارد شده را انجام دهد نمی ایستد. حال برای بستن پنجره ابتدا باید باید دکمه های Ctrl+C را بفشارید. و سپس دستور زیر را با آمدن جای نوشتن کد وارد کنید.
exit
نکته مهم: دقت کنید که زمانی که شما کلید هایCtrl+C را می فشارید، ممکن است اجرای کد در آن واحد قطع نشود. چون بسیاری از کدها برای راحتر شدن کار چندین (عموما 60) صفحه را فراخوانی می کنند. پس از به پایان رسیدن فراخوانی کد دیگر کار را ادامه نمی دهد و میتوانید دستور exit را وارد کنید.
برای اطلاعات بیشتر اینجا را مطالعه نمایید.
دستور cron
[ویرایش]برای اجرای دستورهای ربات به نحوی که زمانبندی داشته باشند از دستور cron باید استفاده کرد به این نحو که سرور را مجبور میکنید در زمان خاصی دستور یا ربات شما را انجام دهد.این ابزار خط فرمان در اکثر مخازن دیسترو ها موجود است و در تول سرور به صورت پیشفرض نصب شده است.
فایل crontab فایلی هست که بر روی سرور قرار میگیرد و سرور را مجبور میکند محتویاتش را در زمانبندی مورد نظر اجرا کند.
دستورهای crontab
[ویرایش]- crontab -e برای تغییر دادن فایل crontab شما به کار میرود. اگر بار اول است که با این ابزار کار میکنید، فایل مربوطه را میسازد.
بعد از اجرای crontab -e برای اولین بار صفحهای خالی باز میشود که در آن دستور مورد نظر را طبق شرایط زیر وارد کنید. بازدن دکمه Ctrl+X از پنجره خارج میشود و قبل از خروج از کاربر برای ذخیره میپرسد.
- تذکر۱:درصورتی که دستور در دو خط نوشته شود یا با فرمت گفته شده نباشد آن را ذخیره نمی کند.
- crontab -l محتویات کنونی فایل crontab را نشان میدهد.
- crontab -r فایل crontab را حذف میکند.
همچنین این ابزار از مقداری که برای متغیر EDITOR تعیین شدهاست برای ادیتور استفاده میکند. برای مثال اگر میخواهید که از ویرایشگر nano یا vi استفاده کند. در خط فرمان بزنید:
$ export EDITOR=nano
$ export EDITOR=vi
فایل crontab
[ویرایش]با دستور crontab -e فایل crontab را ایجاد کرده و با اضافه کردن دستورهای این فایل را تغییر دهید. برای ایجاد کردن یک زمانبندی جدید به صورت زیر عمل کنید.
- تذکر۱:علامت * به معنای تمامی مقادیر آن قسمت است، مثلا اگر برای قسمت هفته بیایید در تمام روزهای هفته آن دستور اجرا میشود.
- تذکر۲:عبارت */n به معنی هر از n واحد (دقیقه یا ساعت یا روز یا....)
- نکته: برای اینکه ربات بهطور مستمر کارش را ادامه دهد، باید مقادیری که انتخاب میکنید در یک دورهی چرخش قرار گیرند؛
مثلاً اجرای در هر ده دقیقه چنین است:
0,10,20,30,40,50 * * * * دستور اجرای کد
و برای هر بیست دقیقه:
0,20,40 * * * * دستور اجرای کد
که در این حالت، ربات یک ساعت کار میکند و دوباره چرخش آغاز میشود. توجه داشته باشید که جمع فاصلهی بین مقادیر باید به شصت (یک ساعت) برسد و دوباره از صفر ادامه یابد.
برای نمونههای بیشتر crontab rezabot را مشاهده نمائید.
مشکل sendmail
[ویرایش]در حالت معمولی فعالیت های cron به وسیلهی sendmail به کاربری که فعالیت را ایجاد کرده ارسال میشوند. برای جلوگیری از این ارسال دستور زیر را در خط فرمان وارد کنید. >/dev/null 2>&1
چند مثال
[ویرایش]- اجرای میانویکی در دقیقه ۵ ساعت ۲ روز دوشنبه
5 2 * * 1 python /root/yourusername/pywikipedia/interwiki.py -new:5 -ns:14 >/dev/null 2>&1
تذکر:yourusername در عبارت بالا نام کاربری شما در toolserver هست.
مشکلات crontab و اجرای bash
[ویرایش]- دستور n/* به معنی هر از چند n، در بعضی از سیستمها کار نمیکند از جمله تولسرور چون سیستم عامل سولاریس هست، در نتیجه اگر میخواهید دستور شما هر از ۵ دقیقه اجرا شود باید بنویسید.
5٬10٬15٬20٬25
- عدم ذخیره:crontab در صورتی که دستور شما مشکل داشته باشد آن را ذخیره نمیکند
- چند خط شدن دستورها: باید همه دستورها در یک خط مستقل و به صورت یک خطی باشند.در زمانی که دستور در یک خط جای نمیگیرد برای حل این مشکل در crontab از دو راه می توانید استفاده کنید. یکی صفحه را بزرگتر کردن، و دیگری استفاده از فایل bash.
- راه حل اول: این راه حل بسیار ساده است. زمانی که شما کدی را می نویسید اگر برنامه putty که در آن در حال وارد کردن دستور هستید، صفحه اسکرین کوچکی داشته باشد، زمان قرار دادن کد، به چند خط تبدیل می شود. و برای این مشکل تنها کافیست صفحه نرم افزار putty را بزرگتر کنید(مثلا تمام اسکرین) آنوقت دیگر در نوشتن کدهای طولانی مشکلی نخواهید داشت.
- ساخت فایل bash:در صورتی که به علت طولانی بودن دستور نیاز شد از فایل bash استفاده کنید برای ساخت آن در محیط WinSCP کلیک سمت راست و دکمه New را بزنید و نام مورد نظر خود بدون پسوند را اضافه نمایید. و درون فایل مانند تصویر روبرو دستورهای خود را بنویسید.
- سامان دادن به corntab برای جلوگیری از شلوغ شدن crontab میتوانید دستورهایی را که مثلا روزانه یا ماهیانه اجرا می شوند را در یک فایل bash قرار دهید و در crontab فقط آن فایل bash را بخوانید. به کمک این ترفند کنترل و رفع اشکال دستورهای اجرایی، سریعتر انجام میگیرد.
- نکته:برای اجرای دستورهای یک bash باید قبل از نام آن عبارت bash نوشته شود مانند متن درون این مثال
مشکل قطع دستورها
[ویرایش]- SQL
در MYSQL تولسرور دستوری جاسازی شده است که در صورت طولانی شدن Query باید دستورهای مناسب را در Query قرار دهید تا فرمان شما قطع نگردد. برای اطلاعات بیشتر اینجا را مطالعه نمایید.
- دستورهای دیگر
تمام اشتراکها در تول سرور دارای محدودیت استفاده از Ram و CPU هستند .گاهی به علت پرشدن ظرفیت CPU یا حافظه Ram اشتراک شما، نرمافزار slayerd (در تولسرور) کدهای شما را قطع (Kill) میکند تا اشتراک شما به محدودیتهای خود بازگردد. و معمولا این عمل با ارسال ایمیل به شما همراه است و در ایمیل ذکر میشود که دستور مورد نظر قطع شدهاست.
- راهحل
- استفاده از کدهایی که از CPU , RAM کمتری استفاده می کنند.(کمتر استفاده کردن از کدهایی مانند ردههمسنگ- میان ویکی که رم زیادی استفاده میکنند یا کدهای آماری که مصرف سیپییو آنها زیاد هست)
- تغییر در برنامهٔ اجرای کدها تا تعداد کدهای کمتری به صورت همزمان بر روی سیستم اجرا شوند مثلا می توانید فواصل زمانی اجرای کدها را بیشتر کنید (اگر قبلا هر از ۱۵ دقیقه بودهاست آن را به هر از ۳۰ دقیقه تغییر دهید) یا ساعت شروع کدها را به نحوی تنظیم نمائید که کدهای قبلی تمام شدهباشند.
- توجه داشته باشید که تعداد مقالاتی که میخواهید در یک بازهٔ زمانی ویرایش شوند را متناسب با شرایط ویکی تنظیم کنید، مثلاً در حالت عادی ویکیفا در هر پانزده دقیقه شاید پنج یا ده مقالهی جدید (آرگومان new) ساخته شود و باید برای دادن دستورها این مقادیر را رعایت کنید و مثلاً برای میانویکی هر پانزده دقیقه، ده مقالهی جدید (آرگومان -new:10) یا ۲۰۰ تغییر اخیر (آرگومان -recentchanges:200)، مناسب است.
قطع فعالیت crontab
[ویرایش]در صورتی که قصد دارید ربات شما دستورهای crontab را اجرا نکند و از نو اجرا کند (restart)، دستور زیر را در خط فرمان بنویسد. بعد از اجرای این دستور دسترسی شما به برنامه putty نیز قطع میشود که باید این برنامه را ببندید و از نو باز کنید
pkill -u username
در این عبارت username همان نام کاربری شما در تولسرور هست.
قطع فعالیت screen
[ویرایش]در فرمان زیر idnymber عدد اسکرین است. توجه کنید S و X هر دو با حروف بزرگ هستند.
screen -X -S idnumber kill
چند ترفند
[ویرایش]برای مشاهده فعالیتهای کدهای پایتون که روی سرور فعال هستند از دستور زیر استفاده کنید.
$ ps -ef | grep python
اگر خروجی را به صورت پویا (دینامیک) میخواهید از دستور top استفاده کنید همچنین اگر فعالیتهای کاربر خاصی را میخواهید بررسی کنید از سوییچ u استفاده کنید.
مشاهده فعالیت رباتتان در تولسرور
[ویرایش]برای مشاهده فعالیتهای رباتتان باید کد زیر را بنویسید.
ps -ef | grep username
- تذکر۱: username همان نام کاربری شما در تولسرور هست.
به روز رسانی اتوماتیک
[ویرایش]برای به روز رسانی اتوماتیک ربات، یک فایل با نام مثلا update بدون پسوند بسازید و درون آن دستور زیر را قرار دهیدو در crontab این فایل را مثلا برای اجرای هر هفته یکبار بخوانید.
# !/bin/bash
cd /home/username/pywikipedia
svn update
- تذکر۱: username همان نام کاربری شما در تولسرور هست.
پرسشهای رایج
[ویرایش]پرسش:پیشنهاد میکنید از willow.toolserver.org یا nightshade.toolserver.org استفاده کنم؟ آیا اصلاً تفاوتی هم دارند؟
- پاسخ:پیوند دومی اصلا فعال نیست مدتی هست که مشکل دارد و باید از willow استفاده کنید. اما در حالت کلی و در صورت فعال بودن پیوند، شما می توانید از دو طریق مجزا به سرور مرتبط باشید. یعنی هر ارتباط از هم جداست. هر کدام کرون تب و اسکرین تب های جداگانه ای دارند. و حساب ربات می تواند همزمان با هردو کار کند.
پرسش:بعد از لاگین شدن، هر دستوری را که اجرا میکنم خطای Permission denied میدهد! باید چکار کنم؟
- پاسخ:شاید passfile یا user-config.py را درست تنظیم نکردید یا در آن ویکی مجوز ندارید همچنین این نکته را بدانید که آیپی تول سرور در بسیاری از ویکیها از جمله فارسی و انگلیسی بسته شده و کسی با آیپی نمیتواند ویرایش کند و رباتهایی که با نام کاربری وارد میشوند (موفق به لاگین میشوند) فقط میتوانند ویرایش کنند.
جستارهای وابسته
[ویرایش]- راهنما:شروع کار با ربات پایتون
- راهنما:شروع کار با تولسرور
- ویکیپدیا:استخراج آمار از دیتابیس تول سرور
- crontab rezabot
- روش بومیسازی کدهای آماری ویکیانگلیسی