انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: Divan در 14 اسفند 1399، 11:44 قظ
-
سلام دوستان
یه تعداد زیادی فایل دارم که از چندین سرور آرسینک میشه روی یک سرور. اسم فایلا مشخص نیست. تاریخ فایلاهم تاریخ ساخت هستش. میخوام که هر فایلی که سینک میشه روی این سرور بعد از 48ساعت پاک بشه
https://s17.picofile.com/file/8426891942/screen.jpg
توی سرچ ها به این لینک رسیدم که قدیمیه
https://stackoverflow.com/questions/13489398/delete-files-older-than-10-days-using-shell-script-in-unix
اما ساخت کرون جاب و استفاده از این شل اسکریپتو بلد نیستم و اینکه این اسکریپت از کجا میفهمه فایل قدیمیه؟
کسی میتونه کمکم بکنه؟
-
اون شل اسکریپت از find استفاده میکنه تا فایلهایی رو پیدا کنه که با txt. تموم میشن و تنظیم شده که فقط توی یه دایرکتوری خاص دنبال اون فایلها بگرده. اگه هم دایرکتوری توی اون دایرکتوری بود، اون رو نگرده
آخرش هم یه فایل توی همون دایرکتوری درست میکنه که توش نوشته کی اینکار انجام شده، چقدر زمان برده و چه چیزی رو پاک کرده.
بازهم سوالی داشتید بپرسید.
-
همونطور که در عکسی که ارسال کردم خدمتتون میبینید من میخوام دایرکتوری قدیمی رو پاک بکنه. این دایرکتوری ها اصلی هستند و داخلشون بیش از 100 فایل و دایرکتوری دیگه هست.
چطوری تغییرش بدم که دایرکتوری قدیمی از 48ساعتو پاک بکنه؟
-
اگه اون پوشهها توی یه مسیر خاص باشند خیلی راحت میشه با این دستور کار شما رو انجام داد. (به شکلهای دیگه هم میشه)
find /path/to/dir -type d -ctime +2 -exec sudo rm -rf {} +
به جای /path/to/dir/ مسیر جایی که اون پوشهها ذخیره میشن رو بدید.
اگه دسترسی نوشتن روی اون پوشهها داشته باشید، لازم نیست از sudo توی این قسمت استفاده کنید.
-exec sudo rm -rf {} +
اون اسکریپت همین کار رو میکنه ولی روی فایلهایی که با txt. تموم میشن و بعدش یه فایل توی همون مسیر که اجرا شده میسازه و توش مینویسه که چیکار کرده.
شما میتونید دستور بالا رو به فایل /etc/crontab اضافه کنید. ولی بهتره که برید توی پوشه /etc/cron.d/ و اونجا یه فایل به هر اسمی خواستید درست کنید و این رو داخلش بنویسید
0 */2 * * * root find /path/to/dir -type d -ctime +10 -exec rm -rf {} +
این هر دو ساعت یکبار سر دقیقه 0 اجرا میشه. میتونید تنظیم کنید که بهجای روت، با کاربر خودتون اجرا بشه.
یا اینکه میتونید از همون اسکریپت استفاده کنید فقط بهجای path که اون بالا تعریف شده مسیر خودتون رو بدید
دستور find رو هم مثل بالا بنویسید، فقط قبل exec- اینو اضافه کنید print-
و آخر اینکه جلوی days عدد 2 رو بزارید
بعد اسکریپت رو ذخیره کنید ولی توی فایل کرون به جای find و ادامش، این رو بنویسید
/bin/bash /path/to/script
فقط اینکه اسکریپت بالا با هر بار اجرا شدن یه فایل توی مسیری که اجرا شده درست میکنه و میگه چیکار کرده که ممکنه بعد یه مدت اون فایلها زیاد بشن.
اگه به اون لاگها نیاز ندارید بهتره همینطوری دستور رو توی کرون بنویسید.