تخفیف های داغ در جشنواره تابستانه توسینسو تخفیف های داغ در جشنواره تابستانه توسینسو
مانده تا پایان تخفیف
مشاهده دوره ها
0

اسکریپت حذف فایل با پر شدن ظرفیت در لینوکس

میخام یک اسکریپتی بنویسم توی لینوکس که وختی حجم یه مسیری یا حجم یک دیسک بیشتر از مثلا یک مقداری مثلا 90 گیگ شد اتوماتیک از اون مسیر فایل ها رو دیلیت کنه.ممنون میشم از اساتید راهنماییم کنن. سپاسگذارم.

پرسیده شده در 1401/02/31 توسط

9 پاسخ

2

ممنونم جناب کرمانی عزیز...

تست میکنم ببینم چطور میشه...بینهایت ممنونم از وختی که برام گذاشتین.

پاسخ در 1401/03/01 توسط
0

سپاسگذارم از شما...

سوالی که دارم راجب این اسکریپت اینه که cron از کجا متوجه بشه که چقدر ظرفیت دیسک پر شده ؟

پاسخ در 1401/03/01 توسط
0

سپاسگذارم از شما جناب کرمانی عزیز....

یه زحمت دیگه داشتم....تو پست قبلی گفتم که حجم هم مد نظرمه....مثلا همین دایرکتوری home/tmp/ اگه بیش از مثلا 100 گیگ برسه دیلیت کنه..... بر اساس درصد نباشه....تو همین اسکریپت یک حجم مشخصی هم براش تعریف بشه مثلا 100 گیگ که هر وخت cron برسی کرد و دید بالای 100 گیگ شده اقدام به دیلیت کردن فایل های درون دایرکتوری کنه.

پاسخ در 1401/03/01 توسط
3

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

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 آدس دایرکتوری کش سیستم خودتون رو قرار بدید. همچنین شما می تونید با مطالعه و تغییر قسمت های دیگه فایل، فعالیت های مد نظرتون رو انجام بدید. در آخر هم بعد از ساخت و طراحی سورس کد و برنامه مورد نظر، اون رو در قسمت کرون های لینوکس برای اجرا شدن (به صورت دقیقه ای، ساعتی، روزانه، ماهانه و یا سالانه) تنظیم کنید.

همچنین در آخر هم لینک منابع مختلفی رو براتون قرار میدم تا با مطالعه اون ها، فعالیت های گفته شده رو به درستی انجام بدید:

پاسخ در 1401/02/31 توسط
0

نه من منظورم توی اسکریپتی که خودتون دادین...

میخام بجای دیسک که نوشتین 

FILESYSTEM=/dev/sda1 # or whatever filesystem to monitor

آدرس یک مسیری رو بدم مثلا مسیر home/temp/ رو وختی مثلا حجم این دایرکتوری به 100 گیگ رسید دیلیت کنه محتویات این دایرکتوری رو

پاسخ در 1401/03/01 توسط
1

سورس کد ادیت شده رو براتون در زیر قرار دادم:

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 {} \;


پاسخ در 1401/03/01 توسط
2

شما می تونید با دستور زیر میزان حجم دایرکتوری خودتون رو بدست بیارید (به گیگابایت):

du -sh /home


بنابرین می تونید در ابتدا با به دست آوردن میزان حجم مصرفی دایرکتوری، بررسی کنید که اگه بیشتر از ۱۰۰ گیگ بود، ادامه برنامه رو اجرا کنه و در غیر این صورت هیچ کاری انجام نده. با اجرا کردن دستور بالا و اضافه کردن اون به داخل یک متغیر:

HAJM=$(du -sh /home)


می تونید مقدار مصرفی دایرکتوری خودتون رو پیدا کنید. سپس بررسی کنید که اگه این مقدار بیشتر از ۱۰۰ بود، عملیات حذف فایل هارو انجام بده:

if (( HAJM > 100 )); then
    ...
fi


پاسخ در 1401/03/01 توسط
0

سپاسگذارم....

اگر بخام ادرس یک دایرکتوریو بدم و بگم که مثلا این دایرکتوری هر وخت از 100گیگ بیشتر شد دیلیت کنه چطور؟

پاسخ در 1401/03/01 توسط
0

سلام مجدد، خواهش می کنم. شما می تونید برای معرفی مسیر فایل سیستم و یا دایرکتوری خودتون از دستور df استفاده کنید. همچنین برای دیدن راهنما و سوییچ های این دستور، می تونید از آپشن زیر استفاده کنید:

df --help


در آخر هم، در ابتدا برنامه رو به صورت مقدماتی و در هارد و یا فضاهای خالی تست و اجرا کنید و با تغییر دادن سورس کد و سوییچ های مورد نظر، به اسکریپت دلخواه خودتون برسید و سپس اون رو در قسمت کرون ها و در فایل های اصلیتون استفاده کنید.


پاسخ در 1401/03/01 توسط

پاسخ شما