اسکریپت حذف فایل با پر شدن ظرفیت در لینوکس
میخام یک اسکریپتی بنویسم توی لینوکس که وختی حجم یه مسیری یا حجم یک دیسک بیشتر از مثلا یک مقداری مثلا 90 گیگ شد اتوماتیک از اون مسیر فایل ها رو دیلیت کنه.ممنون میشم از اساتید راهنماییم کنن. سپاسگذارم.
9 پاسخ
ممنونم جناب کرمانی عزیز...
تست میکنم ببینم چطور میشه...بینهایت ممنونم از وختی که برام گذاشتین.
سپاسگذارم از شما...
سوالی که دارم راجب این اسکریپت اینه که cron از کجا متوجه بشه که چقدر ظرفیت دیسک پر شده ؟
سپاسگذارم از شما جناب کرمانی عزیز....
یه زحمت دیگه داشتم....تو پست قبلی گفتم که حجم هم مد نظرمه....مثلا همین دایرکتوری home/tmp/ اگه بیش از مثلا 100 گیگ برسه دیلیت کنه..... بر اساس درصد نباشه....تو همین اسکریپت یک حجم مشخصی هم براش تعریف بشه مثلا 100 گیگ که هر وخت cron برسی کرد و دید بالای 100 گیگ شده اقدام به دیلیت کردن فایل های درون دایرکتوری کنه.
سلام وقت بخیر، شما می تونید این برنامه رو با زبان های مختلفی طراحی و بنویسید و بعد از اون، فایل مورد نظرتون رو در قسمت کرون های لینوکس قرار بدید تا به صورت دوره ای اجرا و چک بشه. از سورس کدی که می تونم بهش اشاره کنم، با زبان بش هست که بعد از هر بار اجرا، هارد دیسک مورد نظر شما رو بررسی و اگه از یک مقداری بیشتر باشه، فایل های اون رو پاک می کنه. همچنین می تونید با شخصی سازی سورس، مراحل دلخواه خودتون رو تعیین و انجام بدید.
FILESYSTEM=/dev/sda1 # or whatever filesystem to monitor
CAPACITY=95 # delete if FS is over 95% of usage
CACHEDIR=/home/user/lotsa_cache_files/
# Proceed if filesystem capacity is over than the value of CAPACITY (using df POSIX syntax)
# using [ instead of [[ for better error handling.
if [ $(df -P $FILESYSTEM | awk '{ gsub("%",""); capacity = $5 }; END { print capacity }') -gt $CAPACITY ]
then
# lets do some secure removal (if $CACHEDIR is empty or is not a directory find will exit
# with error which is quite safe for missruns.):
find "$CACHEDIR" --maxdepth 1 --type f -exec rm -f {} \;
# remove "maxdepth and type" if you want to do a recursive removal of files and dirs
find "$CACHEDIR" -exec rm -f {} \;
fi در قسمت FileSystem آدرس دیسک خودتون رو قرار بدید. در قسمت Capacity میزان درصد پر شدن حافظتون رو قرار بدید. همچنین در قسمت Cachedir آدس دایرکتوری کش سیستم خودتون رو قرار بدید. همچنین شما می تونید با مطالعه و تغییر قسمت های دیگه فایل، فعالیت های مد نظرتون رو انجام بدید. در آخر هم بعد از ساخت و طراحی سورس کد و برنامه مورد نظر، اون رو در قسمت کرون های لینوکس برای اجرا شدن (به صورت دقیقه ای، ساعتی، روزانه، ماهانه و یا سالانه) تنظیم کنید.
همچنین در آخر هم لینک منابع مختلفی رو براتون قرار میدم تا با مطالعه اون ها، فعالیت های گفته شده رو به درستی انجام بدید:
- بیشتر بخوانید: چگونه Cron را در لینوکس تنظیم کنیم؟
- منبع: اسکریپت برای حذف فایل ها، در زمانی که دیسک پر است
نه من منظورم توی اسکریپتی که خودتون دادین...
میخام بجای دیسک که نوشتین
FILESYSTEM=/dev/sda1 # or whatever filesystem to monitor
آدرس یک مسیری رو بدم مثلا مسیر home/temp/ رو وختی مثلا حجم این دایرکتوری به 100 گیگ رسید دیلیت کنه محتویات این دایرکتوری رو
سورس کد ادیت شده رو براتون در زیر قرار دادم:
FILESYSTEM=/home
CAPACITY=95 # delete if FS is over 95% of usage
CACHEDIR=/home/user/lotsa_cache_files/
# Proceed if filesystem capacity is over than the value of CAPACITY (using df POSIX syntax)
# using [ instead of [[ for better error handling.
if [ $(df -hT $FILESYSTEM | awk '{ gsub("%",""); capacity = $5 }; END { print capacity }') -gt $CAPACITY ]
then
# lets do some secure removal (if $CACHEDIR is empty or is not a directory find will exit
# with error which is quite safe for missruns.):
find "$CACHEDIR" --maxdepth 1 --type f -exec rm -f {} \;
# remove "maxdepth and type" if you want to do a recursive removal of files and dirs
find "$CACHEDIR" -exec rm -f {} \;شما می تونید با دستور زیر میزان حجم دایرکتوری خودتون رو بدست بیارید (به گیگابایت):
du -sh /home
بنابرین می تونید در ابتدا با به دست آوردن میزان حجم مصرفی دایرکتوری، بررسی کنید که اگه بیشتر از ۱۰۰ گیگ بود، ادامه برنامه رو اجرا کنه و در غیر این صورت هیچ کاری انجام نده. با اجرا کردن دستور بالا و اضافه کردن اون به داخل یک متغیر:
HAJM=$(du -sh /home)
می تونید مقدار مصرفی دایرکتوری خودتون رو پیدا کنید. سپس بررسی کنید که اگه این مقدار بیشتر از ۱۰۰ بود، عملیات حذف فایل هارو انجام بده:
if (( HAJM > 100 )); then
...
fi
سپاسگذارم....
اگر بخام ادرس یک دایرکتوریو بدم و بگم که مثلا این دایرکتوری هر وخت از 100گیگ بیشتر شد دیلیت کنه چطور؟
سلام مجدد، خواهش می کنم. شما می تونید برای معرفی مسیر فایل سیستم و یا دایرکتوری خودتون از دستور df استفاده کنید. همچنین برای دیدن راهنما و سوییچ های این دستور، می تونید از آپشن زیر استفاده کنید:
df --help
در آخر هم، در ابتدا برنامه رو به صورت مقدماتی و در هارد و یا فضاهای خالی تست و اجرا کنید و با تغییر دادن سورس کد و سوییچ های مورد نظر، به اسکریپت دلخواه خودتون برسید و سپس اون رو در قسمت کرون ها و در فایل های اصلیتون استفاده کنید.