اطلاعیه

بستن
هنوز اعلام نشده است.

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

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

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

    من inotify tools رو در لینوکس نصب کردم. میخوام به طور مداوم بتونم file ها و directory هایی که در linux ایجاد میشه رو بفهمم و با استفاده از postfix به من ایمیل بزنه. من شاید بتونم ارسال ایمیل رو خودم به وسیله postfix انجام بدم اما برای بخش دومش که باید دنبال بهترین راه حل برای دیتکت فایل ها توی لینوکس باشم مشکل دارم.
    کد PHP:
    # yum install inotify-tools 
    ویرایش توسط Habili : http://linux-zone.org/forums/member/5-habili در ساعت 10-23-2018, 03: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

    نظر


    • #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 : http://linux-zone.org/forums/member/11-masome-vahid در ساعت 10-14-2018, 03:44 PM
        Telegram : https://telegram.me/linuxzone

        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 : http://www.linkedin.com/profile/view...15&trk=spm_pic

        نظر


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

          نظر


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

            نظر

            پردازش ...
            X
            کانال تلگرام منطقه لینوکسی ها