اطلاعیه

بستن
No announcement yet.

اسکریپت باز و بسته کردن یک سرویس خاص در لینوکس توسط مرکز تماس استریسک / الستیکس

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
پاک کردن همه
پست های جدید

  • اسکریپت باز و بسته کردن یک سرویس خاص در لینوکس توسط مرکز تماس استریسک / الستیکس

    چند روز پیش یک سناریویی درگیرش شدم، به این صورت بود که یکی از همکاران یک برنامه Java یی توی سرور مرکز تماس asterisk نوشته بود که هر سری بعد از ادیت کردن کدهای فایل جاوا نیاز بود اون برنامه خاصی که نوشته بود یکبار بسته بشه و دوباره باز بشه. در روز من چندین مورد درگیر این موضوع بودم و با توجه به اینکه دسترسی همکارم به سرور محدود بود و دسترسی باز و بسته کردن سرویس ها رو نداشت به ذهنم رسید که توی استریسک چکار کنم که با گرفتن یک فیچر کدی یک سرویس یا برنامه خاصی توی لینوکس باز و بسته بشه.

    این اسکریت چند خطی رو نوشتم و با شما هم به اشتراک میگذارم. در ابتدا یک فایل با پسوند .sh درست کنید. ( مثلا service.sh) بعد از ان فراموش نکنید که پرمیژن اجرای به فایل اسکریپت تون بدید حتما.
    کد PHP:
    #!/bin/bash
    var1=`ps aux | grep -v grep | grep Callcenter.jar | awk '{print $2}'`
    kill -9 $var1
    nohup 
    /opt/jdk1.8.0_45/bin/java -jar /tmp/Callcenter_jar/Callcenter.jar &
    echo ${
    var1
    در خط اول با استفاده از دستور ps aux تمام سرویس هایی که در سیستم در حال اجرا هستند نمایش داده میشود و با کمک دستور grep سرویس یا برنامه خاصی که مد نظرمون هست را از لیست دستور ps aux فیلتر میکنیم که فقط اون برنامه مد نظر ما را در خروجی نمایش دهد.
    کد PHP:
    [root@callcenter ~]# ps aux | grep java
    root      5088  1.7  3.9 5659096 398316 ?      Sl   13:53   0:28 /opt/jdk1.8.0_45/bin/java -jar /tmp/Callcenter_jar/Callcenter.jar
    root      5475  0.0  0.0 103252   868 pts
    /2    S+   14:19   0:00 grep java 
    همانطور که در بالا هم مشاهده میکند خروجی ما دو خط داره که یک خطش مربوط به دستور خود grep میباشد. برای حذف کردن آن از لیست خروجی از دستور grep -v grep استفاده میکنیم که از لیست خروجی ها دستور grep را حذف میکند که تنها اون چیزی که ما میخواستیم رو برای ما در خروجی نمایش دهد.
    کد PHP:
    [root@callcenter ~]# ps aux | grep java | grep -v grep
    root      5088  1.7  3.9 5659096 398316 ?      Sl   13:53   0:28 /opt/jdk1.8.0_45/bin/java -jar /tmp/Callcenter_jar/Callcenter.jar 
    در این مرحله قصد داریم ProccessID برنامه مد نظرمون رو به دست بیاریم که بعد از آن بتونیم اون رو ببندیم. در خروجی بالا دومین ستون از دستور ps شماره PID اون برنامه رو میزنه که برای فیلتر کردن اون از دستور awk کمک میگیریم که در خروجی فقط PID را به ما نمایش دهد.
    کد PHP:
    [root@callcenter ~]# ps aux | grep -v grep | grep Callcenter.jar | awk '{print $2}'
    5088 
    خب حالا همین دستور بالا را درون یک متغییر میریزیم و با استفاده از دستور kill پراسس آیدی مربوط به برنامه ای که در بالا فیلتر کردیم را میبندیمش. سپس برای اجرای مجدد همون برنامه و فرستادن برنامه به بک گراند از دستور nohup استفاده میکنیم.
    کد PHP:
    #!/bin/bash
    var1=`ps aux | grep -v grep | grep Callcenter.jar | awk '{print $2}'`
    kill -9 $var1
    nohup 
    /opt/jdk1.8.0_45/bin/java -jar /tmp/Callcenter_jar/Callcenter.jar 
    تا اینجای کار فقط اسکریپت رو نوشتیم. اکنون ما میخوایم یه کاری کنیم که وقتی از روی IP Phone شماره "ستاره 250 مربع" را شماره گیری کردم اون اسکریپته اجرا بشه. برای این کار فایل extensions.conf را با استفاده از یک ادیتور باز کنید :
    کد PHP:
    vim /etc/asterisk/extensions.conf 
    به context داخلی هاتون برید یا یک کانتکست جداگانه ای برای این کار درست کنید سپس دستورات زیر را درون context تان کپی کنید و تغییرات را ذخیره کرده.
    کد PHP:
    [internal]

    ;
    java service restart
    ;exten => *250,1,Authenticate(250)
    exten => *250,n,system(/root/./service.sh)
    exten => *250,n,hangup() 
    در خط دوم از dial plan مان باید مسیر فایل اسکریپتی که نوشتیم را وارد کنیم. و بعد از اتمام کار اسکریپت تماس را باید Hangup کنیم. (خط آخر). فراموش نکنید که بعد از ذخیره تغییرات دایل پلن استریسک را reload بدید.
    کد PHP:
    callcenter*CLIreload
    OR
    callcenter*CLIdialplan reload 
    اکنون شما وقتی از روی تلفن تان شماره *250# را شماره گیری میکنید برنامه مورد نظرتان را یکبار میبندد و دوباره باز میکند. شما میتوانید به دلخواه خودتان سناریو را عوض کنید و روش های مختلف را تست کنید.

    خب همین بود. فراموش نکنید تجربیات خودتان را با ما به اشتراک بگذارید. با آرزوی موفقیت...
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 04-05-2017, 03:38 PM.

درباره انجمن منطقه لینوکسی ها

انجمن منطقه لینوکسی ها با هدف ارتقاء سطح علمی کاربران در سطح جهانی و همچنین کمک به بالا بردن سطح علمی عمومی در زمینه های تخصصی فوق پایه گذاری شده است. انجمن منطقه لینوکسی ها از طریق کارشناسان و متخصصان پاسخگوی سوالات گوناگون کاربران مبتدی یا پیشرفته میباشد تا حد امکان تلاش شده که محیطی متنوع و کاربر پسند و به دور از هرگونه حاشیه جهت فعالیت کاربران در این انجمن ایجاد شود. لذا ما به صورت مستمر برای پیشرفت کمی و کیفی محتوی و اطلاعات انجمنمان میکوشیم که این برای ما ارزشمند و حائز اهمیت است. کلیه حقوق،اطلاعات و مقالات در این انجمن متعلق به سایت منطقه لینوکسی ها میباشد، و هرگونه نسخه برداری بدون ذکر منبع مورد پیگرد قانونی خواهد شد.

شبکه های اجتماعی

ایمیل مدیریت

Habili@linux-zone.org

در حال انجام ...
X
کانال تلگرام منطقه لینوکسی ها