یکی از روش‌های اتوماسیون در لینوکس Ubuntu و دیگر توزیعات مبتنی بر Debian، استفاده از مجموعه ابزار inotify-tools است. با ابزار inotifywatch می‌توانید تمام رویدادهایی که در یک فولدر اتفاق می‌افتد را مانیتور کنید و با ابزار inotifywait می‌توانید در صورت مشاهده‌ی یک رویداد خاص، مجموعه‌ای از وظایف را به صورت خودکار اجرا کنید.

به عنوان مثال می‌توانید فایل‌هایی که در فولدری کپی می‌شود را به صورت خودکار کانورت یا فشرده و در محل دیگری ذخیره کنید. در ادامه به مثال‌هایی از کاربرد inotify-tools در لینوکس Ubuntu و سایر توزیعات مبتنی بر دبیان می‌پردازیم.

قبل از هر چیز توجه کنید که gzip یکی از فرمت‌های فایل‌های فشرده یا آرشیو است، درست مثل ZIP و RAR و کاربرد بسیار گسترده‌ای دارد.

دانلود و نصب inotify-tools و gzip

برای نصب کردن این دو ابزار در لینوکس اوبونتو و همین‌طور توزیعات مشابه که مبتنی بر لینوکس Debian‌ هستند، می‌توانید از دستور apt-get با دسترسی روت استفاده کنید. نیازی به دو بار اجرای دستور نیست بلکه با یک دستور می‌توانید اپلیکیشن inotify-tools و همین‌طور ابزار کار با فایل‌های gzip را نصب کنید.

آموزش کار با inotify-tools

برای چک کردن یک فولدر به منظور شناسایی تغییرات فایل‌ها، از inotify-tools استفاده می‌شود که خود شامل ابزارهای مختلفی است. به عنوان مثال برای چک کردن اینکه با اضافه شدن فایل جدید، چه اتفاقاتی می‌افتد، از inotifywatch استفاده می‌شود.

فرض کنید فولدری به اسم incoming برای فایل‌ها نیاز است. برای ایجاد فولدر از طریق ترمینال، دستور mkdir را اجرا کنید:

و برای چک کردن تغییرات در این فولدر جدید، دستور زیر را اجرا کنید:

توجه کنید که آپشن -v برای این اضافه شده که اطلاعات اضافی در مورد اتفاقات فایل سیستم نمایش داده شود.

اگر از آپشن -t استفاده نکنید، چک کردن فولدر پس از مدت زمان ذکر شده، متوقف نمی‌شود و همیشه ادامه پیدا می‌کند. البته اگر کلید میانبر Ctrl + C را فشار بدهید، کار خاتمه پیدا می‌کند و پیام توقف چک کردن فولدر و خروجی مانیتورینگ نمایش داده می‌شود. مثل تصویر زیر:

اکنون فرض کنید که تغییری در فولدر incoming اتفاق می‌افتد. به عنوان مثال پنجره‌ی جدید ترمینال یا تب جدیدی باز کنید و با اجرای دو فرمان زیر، فایل جدید به اسم newfile را در فولدر incoming ایجاد کنید:

به پنجره یا تب قبلی برگردید و فرمان inotifywatch را با کلید میانبر Ctrl + C متوقف کنید تا اطلاعات در مورد اتفاقات اخیر نمایش داده شود.

آموزش مانیتورینگ فولدر در اوبونتو و انجام فرآیند خودکار در صورت تغییر فایل

همان‌طور که در تصویر فوق مشاهده می‌کنید، تعداد کل تغییرات یا Ctotal، چهار مورد بوده است. در ستون create یا ایجاد فایل، ۱ تغییر ثبت شده است. علاوه بر این رویداد open و attrib و close_write نیز صورت گرفته است چرا که با فرمان touch، فایل ایجاد شده و سپس باز می‌شود و در آن مقدار تهی درج شده و ویژگی‌های آن تنظیم می‌شود و در نهایت فایل بسته می‌شود. ۴ رویداد با اجرای این دستور رخ می‌دهد و همگی توسط inotifywatch ثبت می‌شود.

البته توانمندی ابزار inotify-tools در مانیتورینگ فایل سیستم بسیار جامع و پیشرفته است.

مانیتور کردن رویدادی خاص در یک فولدر و انجام خودکار وظایف

در این مقاله به دنبال بررسی دو رویداد خاص هستیم:

  • create یا ایجاد فایل در فولدر موردنظر
  • moved_to یا انتقال فایل از فولدری دیگر به فولدر موردنظر

برای این مانیتورینگ هم از فرمان inotifywatch استفاده می‌شود اما این بار تنها دو رویداد خاص بررسی می‌شود. برای این کار می‌توان از آپشن -e و نام رویداد استفاده کرد. در مورد دو رویداد فوق، دستور زیر را در ترمینال اجرا کنید:

حال پنجره‌ی دیگری از اپلیکیشن Terminal باز کنید. برای ایجاد یک فایل جدید و تغییر در محتویات فایل و سپس انتقال فایل ساخته شده به فولدر مثال ما که incoming نام دارد، از دستورات زیر استفاده کنید:

اکنون به پنجره‌ی قبلی ترمینال برگردید و کلید Ctrl + C را فشار دهید تا رویدادها لیست شود. همان‌طور که در تصویر زیر مشاهده می‌کنید، یک رویداد ایجاد فایل و یک رویداد انتقال فایل ثبت شده است:

آموزش مانیتورینگ فولدر در اوبونتو و انجام فرآیند خودکار در صورت تغییر فایل

در واقع فایل created.txt در فولدر incoming ایجاد شده و فایل دیگری به اسم created2.txt از فولدری به این فولدر منتقل شده است. سایر کارهای انجام شده مثل تغییر در محتویات فایل created.txt در مانیتورینگ فولدر ثبت نمی‌شود.

چک کردن یک فولدر و انجام کاری به صورت خودکار در اوبونتو

فرض کنید در لینوکس اوبونتو یا توزیعات مشابه آن، می‌خواهید فولدر خاصی را مانیتور کنید و به محض رویت تغییری در فایل‌ها، چند کار مختلف به ترتیب انجام شود. به عنوان مثال اگر فایلی در فولدر ایجاد شد یا به آن منتقل شد، به صورت خودکار با ابزار gzip فشرده و جایگزین فایل اصلی شود.

برای این نوع امور خودکار می‌توانید از ابزار دیگری به اسم inotifywait استفاده کنید که جزئی از مجموعه‌ی جالب و قدرتمند inotify-tools است. این ابزار اجرای وظایف را متوقف می‌کند تا زمانی که فایلی ایجاد شود یا فایلی از فولدر دیگری به فولدر موردنظر منتقل شود.

برای نگهداری فایل‌های پردازش‌شده که خروجی کار هستند، به فولدر جدیدی نیاز است. به عنوان مثال فولدری به اسم processed برای این مهم ایجاد می‌شود:

اکنون اسکریپت جدیدی به اسم watch-incoming.sh ایجاد کنید و در آن دستورات زیر را پیست کنید:

اسکریپت فوق دستور inotifywait را با آپشن -m اجرا می‌کند تا مانیتورینگ همیشگی باشد. هر بار که رویدادی از نوع create یا ایجاد فایل یا moved_to یا انتقال فایل شناسایی شود، نام فایل به دستور read ارسال می‌شود تا محتویات فایل خوانده شود. آنچه خوانده شده در متغیری به اسم FILENAME ذخیره می‌شود.

در ادامه بلوک دستورات در حلقه‌ی while، اجرا می‌شود که شامل سه مرحله است: انتقال فایل به فولدر processed و سپس فشرده کردن فایل با ابزار gzip و در نهایت جایگزین کردن فایل اصلی با فایل فشرده که پسوند آن gz است.

برای تنظیم دسترسی‌های این اسکریپت و اجرای آن از فولدر خانه، دو دستور زیر را در ترمینال لینوکس اجرا کنید:

اکنون برای تست و بررسی، از طریق پنجره‌ی دیگری از ترمینال، با فرمان touch که قبلاً به آن اشاره کردیم، فایلی را در فولدر incoming بسازید.

سپس با دستور ls، لیست فایل‌های موجود در دو فولدر incoming و processed را بررسی کنید تا عملکرد اسکریپت موردبحث، روشن شود.

آموزش مانیتورینگ فولدر در اوبونتو و انجام فرآیند خودکار در صورت تغییر فایل

با استفاده از فرمان inotifywait می‌توانید کارهای جالبی در کامپیوتر یا سرور لینوکسی انجام بدهید و کاربردها بسیار گسترده است. به چند مثال توجه کنید:

  • فشرده‌سازی خودکار فایل ویدیویی با ابزار ffmpeg و تبدیل به فرمت MKV با تنظیمات دلخواه فشرده‌سازی
  • فشرده‌سازی عکس‌ها و تبدیل به فرمتی مثل JPG
  • ویرایش عکس مثل قرار دادن لوگو یا نام سایت روی آن (واترمارک کردن عکس)
  • آپلود خودکار فایل‌ها روی سرورهای دیگر یا سرویس‌های فضای ابری

در مورد تبدیل ویدیو با ابزار قدرتمندی به اسم FFMpeg در ویندوز، مقاله‌ای منتشر کردیم. دستورات موردنیاز برای کار با این ابزار در لینوکس، مشابه است.