اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

استفاده از شل اسکریپت برای اتوماتیک کردن Task ها در لینوکس

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

    استفاده از شل اسکریپت برای اتوماتیک کردن Task ها در لینوکس

    در این مقاله ما میخواهیم آموزش برنامه نویسی شل (یا Shell Script) در لینوکس را به جهت اتوماتیک کردن task ها شرح دهیم. چند وقت پیش جایی خواندم که یکی از ویژگی های متمایز یک مدیر سیستم کارآمد، تنبلی آن است. در ابتدا به نظر می رسید کمی تناقض وجود دارد، اما نویسنده به دنبال آن دلیل را توضیح داده است :

    اگر یک ادمین سیستم بیشترین زمانش را برای حل کردن مشکلات و کارهای تکراری صرف کند، شما میتوانید فرض کنید که او هیچ کار کاملا درستی را انجام نداده است. به عبارت دیگر یک مهندس/مدیر کارآمد سیستمی باید یک طرحی را برای انجام تسک های تکراری (به طوریکه خودش تا حد ممکن کاری انجام ندهد) پیاده سازی و باید مشکلات را پیش بینی کند.

    به طور مثال، از سری مقالات، ابزار بررسی شده در بخش سوم، مانیتور گزارش فعالیت های سیستم با استفاده از مجموعه ابزار لینوکسی (به زودی).

    بنابراین اگر به نظر نمیرسد که یک ادمین کار زیادی انجام میدهد به این دلیل است که بیشتر مسئولیت های او با کمک Shell Script نویسی انجام میشود که ما در این پست قصد داریم درباره آن صحبت کنیم.


    همچنین توصیه میشود مطالعه کنید :

    نحوه فعال کردن مد Debug شل اسکریپت در لینوکس

    آموزش نحوه اجرای Trace دستورات در شل اسکریپت با استفاده از Shell Tracing

    نحوه فعال کردن مد دیباگ به منظور بررسی syntax در شل اسکریپت ها

    نصب و راه اندازی Puppet در لینوکس برای اتوماتیک کردن تسک های مدیریتی IT

    نحوه نصب و راه اندازی Ansible در لینوکس - بخش اول



    یک Shell Script چیست ؟

    به عبارت کوتاه یک شل اسکریپت چیزی کمتر یا بیشتر از یک برنامه ای که مرحله به مرحله توسط shell اجرا میشود نیست، در حقیقت برنامه ی دیگریست که لایه اینترفیسی بین Kernel لینوکس و کاربر نهایی فراهم میآورد.

    به صورت پیش فرض، شل مورد استفاده برای اکانت کاربران در ردهت 7 bash (/bin/bash) میباشد. اگر شما توضیحات مفصل و اطلاعاتی درباره تاریخچه آن میخواهید میتوانید به اینجا مراجعه کنید.

    برای دانستن بیشتر درباره مجموعه بزرگ قابلیت های موجود در این شل شما میتوانید صفحه man آن را بررسی کنید، که فرمت PDF آن را میتوانید از لینک زیر دانلود کنید. فرض میکنیم که شما با دستورات لینوکسی آشنا هستید. (در غیر اینصورت اکیدا توصیه میکنیم که پست راهنمای جامع آموزش لینوکس از مبتدی تا پیشرفته که در انجمن منطقه لینوکسی ها موجود است قبل از ادامه این پست مطالعه بفرمایید.) اکنون شروع به کار میکنیم.

    دانلود دستورات Bash Script
    bash.pdf


    نوشتن یک اسکریپت برای نمایش اطلاعات سیستم

    برای راحتی کار یک دایرکتوری ایجاد میکنیم و شل اسکریپت های خود را در آن ذخیره میکنیم.
    کد PHP:
    # mkdir scripts
    # cd scripts 
    یک فایل متنی به نام system_info.sh با ادیتور متنی مورد نظر خود باز میکنیم و کار را با وارد کردن یکسری خطوط کامنت شده در بالای فایل و سپس کامندهای مورد نظر آغاز میکنیم.
    کد PHP:
    #!/bin/bash
    # Sample script written for Part 4 of the RHCE series
    # This script will return the following set of system information:
    # -Hostname information:
    echo -"\e[31;43m***** HOSTNAME INFORMATION *****\e[0m"
    hostnamectl
    echo ""
    # -File system disk space usage:
    echo -"\e[31;43m***** FILE SYSTEM DISK SPACE USAGE *****\e[0m"
    df -h
    echo ""
    # -Free and used memory in the system:
    echo -"\e[31;43m ***** FREE AND USED MEMORY *****\e[0m"
    free
    echo ""
    # -System uptime and load:
    echo -"\e[31;43m***** SYSTEM UPTIME AND LOAD *****\e[0m"
    uptime
    echo ""
    # -Logged-in users:
    echo -"\e[31;43m***** CURRENTLY LOGGED-IN USERS *****\e[0m"
    who
    echo ""
    # -Top 5 processes as far as memory usage is concerned
    echo -"\e[31;43m***** TOP 5 MEMORY-CONSUMING PROCESSES *****\e[0m"
    ps -eo %mem,%cpu,comm --sort=-%mem head -n 6
    echo ""
    echo -"\e[1;32mDone.\e[0m" 
    اکنون، به اسکریپت پرمیژن های اجرایی میدهیم.
    کد PHP:
    # chmod +x system_info.sh 
    و آن را با استفاده از دستور زیر اجرا میکنیم.
    کد PHP:
    ./system_info.sh 
    توجه کنید که header هر بخش برای دید بهتر به صورت رنگی نمایش داده شده است.

    نحوه نوشتن شل اسکریپت در لینوکس





    قابلیت هدر رنگی توسط دستور زیر فراهم آمده است.
    کد PHP:
    echo -"\e[COLOR1;COLOR2m<YOUR TEXT HERE>\e[0m" 

    COLOR1 و COLOR2 به ترتیب رنگهای foreground و background میباشند، (اطلاعات و آپشن های بیشتر در این باره در Arch Linux Wiki توضیح داده شده است.) و همچنین <YOUR TEXT HERE> رشته ایست که میخواهید رنگی نمایش داده شود.



    اتوماتیک کردن Task ها در لینوکس

    کارهایی که ممکن است شما نیاز داشته باشید آنها را اتوماتیک کنید ممکن است مورد به مورد با هم متفاوت باشند. بنابراین امکان اینکه ما همه سناریوهای ممکن را در یک پست پوشش دهیم امکان پذیر نیست، اما ما در اینجا سه مورد تسک کلاسیک که امکان اتوماتیک کردن آن با استفاده از Shell Script هست را ارائه خواهیم داد.

    1 - آپدیت کردن فایل دیتابیس لوکال
    2 - پیدا کردن فایل هایی با پرمیژن 777 ( و سپس حذف آنها)
    3 - هشدار به هنگام مصرف بیش از حد تعریف شده توسط فایل سیستم

    فایلی به نام auto_tasks.sh در دایرکتوری اسکریپت مان با محتوای زیر ایجاد میکنیم.
    کد PHP:
    #!/bin/bash
    # Sample script to automate tasks:
    # -Update local file database:
    echo -"\e[4;32mUPDATING LOCAL FILE DATABASE\e[0m"
    updatedb
    if [ $? == ]; then
    echo "The local file database was updated correctly."
    else
    echo 
    "The local file database was not updated correctly."
    fi
    echo ""
    # -Find and / or delete files with 777 permissions.
    echo -"\e[4;32mLOOKING FOR FILES WITH 777 PERMISSIONS\e[0m"
    # Enable either option (comment out the other line), but not both.
    # Option 1: Delete files without prompting for confirmation. Assumes GNU version of find.
    #find -type f -perm 0777 -delete
    # Option 2: Ask for confirmation before deleting files. More portable across systems.
    find -type f -perm 0777 -exec rm -{} +;
    echo 
    ""
    # -Alert when file system usage surpasses a defined limit
    echo -"\e[4;32mCHECKING FILE SYSTEM USAGE\e[0m"
    THRESHOLD=30
    while read line; do
    # This variable stores the file system path as a string
    FILESYSTEM=$(echo $line awk '{print $1}')
    # This variable stores the use percentage (XX%)
    PERCENTAGE=$(echo $line awk '{print $5}')
    # Use percentage without the % sign.
    USAGE=${PERCENTAGE%?}
    if [ 
    $USAGE -gt $THRESHOLD ]; then
    echo "The remaining available space in $FILESYSTEM is critically low. Used: $PERCENTAGE"
    fi
    done 
    < <(df ---total grep -vi filesystem
    نکته : در صورتی که هنگام اجرای اسکریپت بالا با خطای "updatedb: command not found" مواجه شدید به دلیل نصب نبودن mlocate روی سیستم تان میباشد.
    کد PHP:
    # ./auto_tasks.sh
    UPDATING LOCAL FILE DATABASE
    ./auto_tasks.shline 5updatedbcommand not found
    The local file database was not updated correctly

    جهت برطرف کردن Error بالا malocate را به صورت زیر روی سیستم خود نصب کنید.
    کد PHP:
    yum -y update

    yum 
    -y install mlocate 
    لطفا دقت کنید که بین دو علامت ">" در خط آخر اسکریپت یک فاصله وجود دارد.

    اتوماتیک کردن تسک ها با شل اسکریپت







    استفاده از Cron

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

    با اجرای اسکریپت زیر (filesystem_usage.sh)‌ دستور معروف df -h را اجرا میشود، که فرمت خروجی در قالب یک جدول HTML میباشد که آنرا در فایل report.html در مسیر دایرکتوری WEB_DIR شما ذخیره میکند. (در اینجا چون من سرویس آپاچی دارم مسیر دایرکتوری روت من "/var/www/html" میباشد که در اسکریپت زیر هم تعریف شده است.)
    کد PHP:
    #!/bin/bash
    # Sample script to demonstrate the creation of an HTML report using shell scripting
    # Web directory
    WEB_DIR=/var/www/html
    # A little CSS and table layout to make the report look a little nicer
    echo "<HTML>
    <HEAD>
    <style>
    .titulo{font-size: 1em; color: white; background:#0863CE; padding: 0.1em 0.2em;}
    table
    {
    border-collapse:collapse;
    }
    table, td, th
    {
    border:1px solid black;
    }
    </style>
    <meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
    </HEAD>
    <BODY>" 
    $WEB_DIR/report.html
    # View hostname and insert it at the top of the html body
    HOST=$(hostname)
    echo 
    "Filesystem usage for host <strong>$HOST</strong><br>
    Last updated: <strong>$(date)</strong><br><br>
    <table border='1'>
    <tr><th class='titulo'>Filesystem</td>
    <th class='titulo'>Size</td>
    <th class='titulo'>Use %</td>
    </tr>" 
    >> $WEB_DIR/report.html
    # Read the output of df -h line by line
    while read line; do
    echo 
    "<tr><td align='center'>" >> $WEB_DIR/report.html
    echo $line awk '{print $1}' >> $WEB_DIR/report.html
    echo "</td><td align='center'>" >> $WEB_DIR/report.html
    echo $line awk '{print $2}' >> $WEB_DIR/report.html
    echo "</td><td align='center'>" >> $WEB_DIR/report.html
    echo $line awk '{print $5}' >> $WEB_DIR/report.html
    echo "</td></tr>" >> $WEB_DIR/report.html
    done 
    < <(df -grep -vi filesystem)
    echo 
    "</table></BODY></HTML>" >> $WEB_DIR/report.html 

    همچنین توصیه میشود مطالعه کنید.

    دستور df در لینوکس

    دستور cron در لینوکس به همراه 11 مثال عملی



    در سرور RedHat 7 با IP آدرس 192.168.10.240 شبیه به زیر میباشد.

    نوشتن shell script در لینوکس





    شما هرچقدر اطلاعات بیشتری که بخواهید میتوانید به گزارش بالا اضافه کنید. برای اینکه اسکریپت هر روز ساعت 1:30 PM اجرا شود خط زیر را به فایل crontab اضافه کنید.
    کد PHP:
    30 13 * * * /root/scripts/filesystem_usage.sh 

    خلاصه

    شما ممکن است به تسک های بیشمار دیگری فکر کنید که نیاز به اتوماتیک سازی داشته باشند. همانطور که شما مشاهده میکنید استفاده از شل اسکریپت به صورت گسترده ای این امور را آسان میسازد. اگر این پست برای شما مفید واقع شده با ما به اشتراک بگذارید و یا ایده ها یا نظریات ارزشمند خود را اینجا مطرح کنید.
    فایل های پیوست شده
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-26-2021, 01:15 AM.

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

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

شبکه های اجتماعی
در حال انجام ...
X