خطای edquota: Quota write failed در سی‌پنل

به جرئت می‌شه گفت cPanel کاربرپسندترین و قدرتمندترین کنترل‌پنل میزبانی وب هست. اما گاها اشکالاتی به این کنترل‌پنل ارزنده وارد می‌شه، مثلا حجم دیسک مصرفی اکانت‌ها به درستی نمایش داده نمی‌شه. خب خود سی‌پنل برای رفع این اشکالات عموما اسکریپت‌هایی ارائه داده. اسکریپتی که برای رفع اشکالات مصرف دیسک اکانت‌ها توی سی‌پنل تعریف شده با دستور زیر اجرا می‌شه.

/scripts/fixquotas

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

Installing Default Quota Databases......Done
journaled quota support: kernel supports, user space tools supports (available)
checking out /backup
checking out /backup
Quotas have been enabled and updated.
Reading package for 1G
Resetting quota for user1 to 1024 M
edquota: Quota write failed (id 511): Invalid argument
Reading package 2G
Resetting quota for user2 to 2048 M
edquota: Quota write failed (id 518): Invalid argument
Reading package 3G
Resetting quota for user3 to 3072 M
edquota: Quota write failed (id 521): Invalid argument
Resetting quota for user4 to 3072 M
edquota: Quota write failed (id 515): Invalid argument
Resetting quota for user5 to 1024 M
......
ادامه خواندن خطای edquota: Quota write failed در سی‌پنل

بش اسکریپت خواندن خط به خط محتویات یک فایل

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

/scripts/pkgacct admin

انجام این کار شاید برای یک، دو، پنج یا ده تا یوزر زیاد سخت نباشه، اما اگر ۲۰۰ تا یوزر داشته باشیم چطور؟ آیا باید بشینیم از تک تک اکانت‌ها بکاپ بگیریم؟ طبعا نه! نه عمر ما انقدر طولانیه که برای این چیزهای پیش پا افتاده وقت این چنینی بذاریم و نه دنیای لینوکس اونقدر محدوده که نتونه راهی جلوی ما بذاره که این کار رو توسط اتوماسیون انجام بدیم.

ادامه خواندن بش اسکریپت خواندن خط به خط محتویات یک فایل

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

گاها ممکنه به هر دلیلی بخواید روی سیستم عامل لینوکس‌تون کامندهای اختصاصی داشته باشید. خب ما می‌دونیم یک سری دستورات توی کرنل لینوکس هستند، مثل دستور ls که لیست فایل‌ها و دایرکتوری‌های موجود در یک دایرکتوری رو به شما نشون می‌ده. یا یک سری دستورات بعد از نصب یک سری از برنامه‌ها برای شما اضافه می‌شن، مثل دستور ls که بعد از نصب برنامه‌ای تحت همین عنوان (sudo apt install ls) به سیستم عامل شما اضافه می‌شه و در صورتی که اجرا بشه، قطار در حال حرکتی صفحه ترمینال شما رو مزین می‌کنه.

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

خب، چطور این کار رو انجام بدم؟

ادامه خواندن ایجاد کامند اختصاصی در لینوکس

شل اسکریپت بکاپ از دیتابیس‌های MySQL

لکن اگر نیاز به اسکریپتی دارید که بتواند از همه دیتابیس‌هاس MySQL یک سرور بکاپ بگیرد می‌توانید از اسکریپت زیر استفاده نُمایید.

 #! /bin/bash
 
TIMESTAMP=$(date +"%F")
BACKUP_DIR="/backup/dbs"
MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump

mkdir -p "$BACKUP_DIR/$TIMESTAMP"
 
databases=`$MYSQL -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)"`
 
for db in $databases; do
  $MYSQLDUMP --force --opt -u root --databases $db | gzip > "$BACKUP_DIR/$TIMESTAMP/$db.gz"
done

find $BACKUP_DIR/* -type d -ctime +29 -exec rm -rf {} \;

echo Databases Backup Task Completed On $HOSTNAME

کار این اسکریپت این هست که از همه دیتابیس‌های MySQL بکاپ گرفته، با فرمت gz فشرده‌سازی کرده و در مسیر زیر نگهداری می‌کند.

/backup/dbs

هربار اسکریپت اجرا می‌شه دیتابیس‌های دامپ شده در یک دایرکتوری که نام اون تاریخ روز اجرای اسکریپت هست ذخیره می‌شن.

همچنین لاین زیر هم بدین منظور بکار رفته که بکاپ‌هایی که 30 روز یا بیشتر از زمان ایجادشون گذشته حذف بشن تا خدای‌ناکرده مشکل کمبود فضای دیسک هم ایجاد نشه.

find $BACKUP_DIR/* -type d -ctime +29 -exec rm -rf {} \;

شناخته نشدن آدرس localhost برای اتصال به دیتابیس

در جمعه‌ای که گذشت با یک مشکل عجیب مواجه شدم! یهو مانیتورینگ اعلام کرد یکی از سرورها داون شده. از اونجایی که مانیتورینگ ما یک آدرس رو چک می‌کنه که توی اون یک کانکشن به دیتابیس زده می‌شه و در صورتی که ارتباط برقرار بشه، سرور رو آپ در نظر می‌گیره چون سرور در دسترس بود اولین احتمالی که دادم استاپ شدن سرویس دیتابیس mysql سرور بود. تعجبم وقتی بیشتر شد که به سرور متصل شدم و دیدم که mysql آپ هست و بدون مشکل داره کار می‌کنه.

خطای فایل php مانیتورینگ رو چک کردم بصورت زیر بود.

mysqli_connect(): (HY000/2002): No such file or directory i
n /home/...

همه سایت‌هایی که اتصال به دیتابیس داشتن هم خطای دیتابیس می‌دادن (ژانر وحشت). با سرچ خطا تو گوگل و خوندن یکی دو تا تجربه مشابه، متوجه شدم که علت بروز خطا این هست که عبارت localhost به عنوان سرور دیتابیس شناخته نمی‌شه و اگر به جای این عبارت آدرس لوکال یعنی 127.0.0.1 رو قرار بدم خطا رفع می‌شه (الله اکبر)

ادامه خواندن شناخته نشدن آدرس localhost برای اتصال به دیتابیس

رفع خطای Response body too large مود سکوریتی

دقایقی پیش از این که به حضور انور شما برسم با خطای internal server error در یکی از سایت‌های سی‌پنلی مواجه شدم. البته خطا روی وب‌سایت نمایش داده نمی‌شد و از طریق کنسول گوگل کروم تونستم متوجه خطا بشم. حقیقتا الله‌اکبر از خطاهایی که سعی در پنهان کردن خودشون دارن.

طبق معمول برای یافتن علت خطا به لاگ‌ها مراجعه کردم. ادامه خواندن رفع خطای Response body too large مود سکوریتی

عدم امکان لاگین در وب میل dovecot

نزدیک به یک هفته بود که روی یکی از سرورهام که دایرکت ادمین نصب شده بود امکان لاگین به وب‌میل ها رو نداشتم. روی راندکیوب که می‌خواستم لاگین کنم خطای زیر دریافت می‌شد.

Connection to storage server failed

روی squirrelmail هم این خطا بود.

Connection dropped by IMAP server

اولین قدمی که طبیعتا لازم بود انجام بدم این بود که لاگ‌ها رو بررسی کنم. لاگ ایمیل روی دایرکت ادمین توی مسیر /var/log /maillog قرار داره. ادامه خواندن عدم امکان لاگین در وب میل dovecot