سلام! بعد از یک وقفه نسبتا طولانی با آموزش دیگه برای لینوکس پروفشنالز 😀 در خدمتتون هستیم.
این اموزش توضیح میدیم چطوری یک برنامه که در لینوکس درحال اجراست رو مانیتور کنیم ، به طور مثال اگر وب سرور دان شد به صورت خودکار استارت شود و یا …
برای اینکار از Supervisord استفاده میکنیم.
اطلاعات پکیج در : (Centos)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
[root@CloudHa ~]# yum info supervisor Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile epel/metalink | 30 kB 00:00 * base: mirror.softaculous.com * epel: mirror.wiuwiu.de * extras: mirror.wiuwiu.de * updates: centosmirror.netcup.net base | 3.7 kB 00:00 epel | 3.2 kB 00:00 epel/primary | 3.2 MB 00:00 epel 12518/12518 extras | 3.4 kB 00:00 updates | 3.4 kB 00:00 Available Packages Name : supervisor Arch : noarch Version : 2.1 Release : 9.el6 Size : 292 k Repo : epel Summary : A System for Allowing the Control of Process State on UNIX URL : http://www.plope.com/software/supervisor2/ License : ZPLv2.1 and BSD and MIT Description : The supervisor is a client/server system that allows its users to : control a number of processes on UNIX-like operating systems. |
همانطور که مشاهده میکنید اخرین نسخه اون در مخزن epel قرار داره که نسخه ۲٫۱ هست البته اخرین نسخه اون در حال حاظر ۳ هست که میتونید به کمک pip اون رو نصب کنید.در این اموزش از همان yum نسخه ۲٫۱ نصب و اموزش داده میشود
برای نصب از طریق yum حتما باید epel نصب باشد برای اینکار از دستور زیر استفاده کنید:
1 |
yum install epel-release |
برای نصب با pip با دستور زیر میتونید نصب کنید:
1 |
pip install supervisor |
برای ubuntu نیز:
1 |
apt-get install -y supervisor |
خب پس از نصب با دستور زیر سرویس رو استارت کنید
pre class=”lang:default decode:true “>Centos: service supervisord start
Uubuntu: service supervisor start
1 |
فایل کانفیگ: /etc/supervisord.conf |
فایل کانفیگ فوق رو باز کنید،هدف ما این هست به عنوان مثال اسکریپت زیر با supervisor اجرا کنیم:
1 2 3 4 5 6 7 8 9 |
#!/bin/bash while true do # Echo current date to stdout echo `date` # Echo 'error!' to stderr echo 'error!' >&2 sleep 1 done |
همانطور که مشاهده میکنید اسکریپت فوق به صورت حلقه و پیوسته تا بی نهایت اجرا میشه و ما از supervisor استفاده میکنیم که اگر مشکلی در حین اجرا پیش اومد کنترل شده باشه و نیازی نباشه اسکریپت رو دوباره اجرا کنیم.+ اینکه به صورت خودکار پس از ریبوت سیستم با supervisor اجرا میشه
دستور زیر رو وارد کنید(پس از ذخیره کد فوق در فایل فرضی /root/app.sh )
1 |
chmod 775 /root/app.sh |
خب حالا فایل کانفیگ که در بالا اشاره شد رو باز کنید و چند لاین زیر رو به انتهای اون اضافه کنید:
1 2 3 4 5 6 7 8 9 |
[program:app] command=/bin/sh /root/app.sh directory=/root autostart=true autorestart=true startretries=3 stderr_logfile=/var/log/apperror.log stdout_logfile=/var/log/app.log user=root |
به تریتب خطوط فوق:
- بیانگر اسم برنامه هست که اینجا app گذاشته شده است(دلخواه)
- دستوری که قرار است اجرا شود
- دایرکتری که برنامه در ان قرار دارد(بعضی از برنامه ها directory relative هستند به این معنی قبل از اجرا باید به ان دایرکتری cd شود تا اجرا شوند)
- استارت خودکار برنامه با بوت سیستم عامل
- ری استارت خودکار برنامه درصورت وجود مشکل
- تعداد تلاش هایی که برنامه میکنه برای شروع برنامه(درصورت ناموفق بودن اجرا)
- فایل ارور لاگ
- فایل لاگ خروجی برنامه
- یوزر جهت اجرا اپ که اینجا روت (بالاترین سطح) در نظر گرفته شده است
سپس سیو کنید و خارج شوید و پس از ان supervisor با دستورات ذکر شده دربالا باتوجه به سیستم عامل ری استارت کنید
هم اکنون اگر دستور supervisorctl رو وارد کنید چیزی شبیه زیر مشاهده خواهید کرد:
1 |
app RUNNING pid 12256, uptime 0:00:17 |
همچنین:
1 2 |
[root@CloudHa ~]# ps aux | grep app.sh root 12256 0.0 0.0 106080 1360 ? S 11:19 0:00 /bin/sh /root/app.sh |
همانطور که مشاهده میکنید برنامه ما در حال اجرا هست
برای اینکه supervisor موقع startup سرور اجرا شود دستور زیر رو وارد کنید
1 |
chkconfig supervisord on |
همچنین یکی از قابلیت های بسیار خوب این برنامه امکان دسترسی به پروسس ها از طریق وبسرور هست(مشاهده تصویر زیر) برای فعال کردن اینکار کافی است در فایل کانفیگ supervisor در زیر بخش [supervisord] عبارت زیر رو اضافه کنید
1 2 3 |
http_port=0.0.0.0:9001 http_password=cloudha http_username=admin |
لاین اول برای دسترسی به سرور از همه جا(!) به این پورت هست البته اگر این برنامه رو روی لوکال اجرا میکنید بهتره از ۱۲۷٫۰٫۰٫۱ استفاده کنید
دو لاین دیگر نیز برای تعریف یوزر و پسورد به صفحه زیر است پس از وارد کردن خطوط فوق و سیو ان ؛ supervisor رو ری استارت کنید و سپس از طریق url زیر به صفحه زیر لاگین کنید http://ip:9001
البته اینکار روش هایی دیگری هم دارد بطور مثال از nohup استفاده کنید اما این روش بسیار حرفه ای تر عمل میکند و با supervisor براحتی میتوانید به کمک لاگ ها دیباگ کنید و …
موفق باشید