اطلاعیه

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

دیتکت دایرکتوری ها و فایل های جدید با استفاده از inotify-tools

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

    دیتکت دایرکتوری ها و فایل های جدید با استفاده از inotify-tools

    من inotify tools رو در لینوکس نصب کردم. میخوام به طور مداوم بتونم file ها و directory هایی که در linux ایجاد میشه رو بفهمم و با استفاده از postfix به من ایمیل بزنه. من شاید بتونم ارسال ایمیل رو خودم به وسیله postfix انجام بدم اما برای بخش دومش که باید دنبال بهترین راه حل برای دیتکت فایل ها توی لینوکس باشم مشکل دارم.
    کد PHP:
    # yum install inotify-tools 
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 10-23-2018, 04:54 PM.

    #2
    inotifywait بخشی از inotify-tools هستش که همون ابزاری هستش که کار شما رو انجام میدهد، اهمیتی نداره چندتا فایل در سرور ایجاد میشه، همه رو دیتکت میکنه. برای این کار احتیاج هست که یک اسکریپت بزنید که یک نمونه در زیر برای شما میذارم :
    کد PHP:
    #!/bin/sh
    MONITORDIR="/path/to/the/dir/to/monitor/"
    inotifywait ---e create --format '%w%f' "${MONITORDIR}| while read NEWFILE
    do
            echo 
    "This is the body of your mail" mailx -"File ${NEWFILE} has been created" "yourmail@addresshere.tld"
    done 



    آپشن -m :
    شاخه مورد نظرتون رو به صورت نامحدود مانیتور میکند. اگر شما از این آپشن استفاده نکنید تنها یکبار فایلی که در شاخه مورد نظر ساخته میشه رو دیتکت میکنه و اسکریپت تموم میشه.



    آپشن -r :
    فایل را به صورت recursive مانیتور میکند. (گر تعداد زيادي پوشه/فايل وجود داشته باشد، شناسايي فايلهايي كه اخيرا ايجاد شده اند طول ميكشد.)



    آپشن -e create :
    برای مانیتور کردن event ها مربوط به ساخت فایل های جدید میباشد.



    --format '$w%f' :
    خروجی فایل را به فرمت "/complete/path/file.name" نمایش میدهد.



    "${MONITORDIR}" :
    شامل متغییری که مسیر دایرکتوری که قصد داریم مانیتور کنیم میباشد.

    بعد از اینکه فایل جدید ساخته میشه، inotifywait اون رو دیتکت و در خروجی print میکند.

    اگر شما میخواید چندین دایرکتوری را مانیتور کنید inotifywait اجازه نمیدهد، اما شما شما 2 گزینه دارید، یکی اینکه برای مانیتور کردن هر دایرکتوری یک اسکریپت بسازید دوم یک function داخل اسکریپت تون همانند زیر درست کنید :
    کد PHP:
    #!/bin/sh
    MONITORDIR1="/path/to/the/dir/to/monitor1/"
    MONITORDIR2="/path/to/the/dir/to/monitor2/"
    MONITORDIRX="/path/to/the/dir/to/monitorx/"    

    monitor() {
    inotifywait ---e create --format "%f" "$1" | while read NEWFILE
    do
            echo 
    "This is the body of your mail" mailx -"File ${NEWFILE} has been created" "yourmail@addresshere.tld"
    done
    }
    monitor "$MONITORDIR1&
    monitor "$MONITORDIR2&
    monitor "$MONITORDIRX


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

    fswatch جهت مانیتور تغییرات فایل ها و دایرکتوری ها در لینوکس


    با تشکر
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 09-22-2021, 11:16 AM.

    کامنت


      #3
      مرسی از مطلب جالبی که نوشتید. من پرمیژن هم به اسکریپت inotify دادم ولی وقتی میخوام اجرا کنم با پیغام زیر مواجه میشم.
      کد PHP:
      # sh ./inotify.sh
      Setting up watches.  Bewaresince -r was giventhis may take a while!
      Failed to watch /usr/; upper limit on inotify watches reached!
      Please increase the amount of inotify watches allowed per user via `/proc/sys/fs/inotify/max_user_watches'. 

      کامنت


        #4
        سلام. همونطور که گفته میزان inotify watches مجاز برای هر یوزر رو باید افزایش بدین
        از مسیر :


        کد:
        vim /proc/sys/fs/inotify/max_user_watches
        و مقدار
        fs.inotify.max_user_watches رو افزایش بدین: مثلا
        کد:
        fs.inotify.max_user_watches=524288
        آخرین ویرایش توسط masome vahid; در تاریخ/ساعت 10-14-2018, 04:44 PM.
        Instagram : https://www.instagram.com/iranlinuxforum

        Voip Trainer - Asterisk - Elastix - Agi Programming- NewRock

        Voip Expert :ASTERISK-ELASTIX-NewRock Certified-With Experience of Working With
        Sangoma-Digium-Openvox-Synway-Atcom-Quintum Tenor-Polycom-Yealink-Rtx-Snom
        Cisco Collaboration - CME-CUCM-CUPs-CUC-WEBEX
        LPI ( Fundamental - LPI1 and LPI2 ) - Monitoring: ZABBIX-VOIPMONITOR-NAGIOS - CCNA

        Linkedin Profile : https://www.linkedin.com/in/masuma-vahid-26b17b66/

        کامنت


          #5
          ممنون با nano و vi نمیذاشت ادیتش کنم، این دستور رو زدم اوکی شد.
          کد PHP:
            echo 16384 sudo tee /proc/sys/fs/inotify/max_user_watches 

          کامنت


            #6
            این اسکریپته برای اینکه کار کنه نیاز به sendmail داره. من sendmail رو که نصب کردم تازه فعال شده و داره کار میکنه. بیزحمت اینم بذارید توی داکیومنت.

            کامنت

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

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

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