Announcement

Collapse
No announcement yet.

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

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

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

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

    #2
    inotifywait بخشی از inotify-tools هستش که همون ابزاری هستش که کار شما رو انجام میدهد، اهمیتی نداره چندتا فایل در سرور ایجاد میشه، همه رو دیتکت میکنه. برای این کار احتیاج هست که یک اسکریپت بزنید که یک نمونه در زیر برای شما میذارم :
    PHP Code:
    #!/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 Code:
    #!/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 جهت مانیتور تغییرات فایل ها و دایرکتوری ها در لینوکس


    با تشکر
    Last edited by Habili; 09-22-2021, 11:16 AM.

    Comment


      #3
      مرسی از مطلب جالبی که نوشتید. من پرمیژن هم به اسکریپت inotify دادم ولی وقتی میخوام اجرا کنم با پیغام زیر مواجه میشم.
      PHP Code:
      # 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'. 

      Comment


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


        Code:
        vim /proc/sys/fs/inotify/max_user_watches
        و مقدار
        fs.inotify.max_user_watches رو افزایش بدین: مثلا
        Code:
        fs.inotify.max_user_watches=524288
        Last edited by masome vahid; 10-14-2018, 04:44 PM.

        Instagram : https://www.instagram.com/iranlinuxforum

        Voip Trainer - Asterisk - Elastix - Agi Programming- NewRock

        Voip & Linux Trainer
        kamailio-freeswitch-Asterisk-Issabel-fusion-Programming
        Newrock-Sangoma-Digium-Openvox-Synway-Atcom-Quintum Tenor-Polycom-Yealink-Snom-yeastar-grandstream
        Cisco Collaboration - CME-CUCM-CUPs-CUC-WEBEX
        ZABBIX-VOIPMONITOR
        Linux-Devops

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

        Comment


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

          Comment


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

            Comment

            Working...
            X