NỘI DUNG
Hiện tại khi bạn sử dụng CyberPanel thì đôi lúc bạn sẽ gặp một vấn đề là đầy inodes trên VPS, biểu hiện là bạn không thể ghi được dữ liệu lên web.
Inode là một cấu trúc dữ liệu quản lý thông tin về các tệp và thư mục trong hệ thống tập tin của Unix và các hệ điều hành dựa trên Unix như Linux. Mỗi tệp hoặc thư mục được quản lý bởi một inode riêng.
Số lượng inode luôn có giới hạn. Mỗi file/folder tương ứng với một inode. Khi file system được khởi tạo, một thuật toán sẽ được áp dụng để tính ra số lượng inode dựa trên dung lượng của ổ đĩa tương ứng. Ví dụ, một số hệ thống sử dụng tỉ lệ 1:16 KB, tức là trung bình với mỗi 16KB storage thì sẽ có một inode. Đây cũng chính là số lượng file/folder tối đa bạn có thể tạo và lưu trữ trên hệ thống file của mình.
Quay trở lại vấn đề chính trong bài. Thì CyberPanel rất dễ bị đầy Inodes bởi các session php tạo ra, các session php này tạo liên tục nếu không dọn dẹp thường xuyên thì con số lên đến vài triệu file session php và sẽ làm đầy máy chủ của bạn.
Bước 1: Kiểm tra
Bạn hãy SSH vào máy chủ server sau đó nhập lệnh sau. Lệnh này để kiểm tra số lượng inodes
df -i
Như kết quả bên dưới thì máy chủ này giới hạn 3.0M tức là 3 triệu inodes.
Và bây giờ bạn hãy kiểm tra thư mục sau để xác định số lượng Inodes nằm ở thư mục nào. Bạn sử dụng lênh du -sh --inodes
kèm đường dẫn đến thư mục cần kiểm tra. Và ở đây là /var/lib/lsphp/session/
du -sh --inodes ten_thu_muc
du -sh --inodes /var/lib/lsphp/session/
Kết quả trả về thư mục session
này đang chiếm 2.6 triệu inodes. Và session/lsphp81
chiếm 2.5 triệu inodes
Để xem thêm trong session/lsphp81
có file nào mà nhiều đến thế thì tôi dùng lệnh sau để liệt kê 100 file.
ls -U | head -100
Và kết quả là các file sess_*
Bước 2: Tìm và xoá các file session
Khi đã xác định được file bây giờ hãy cùng tôi xoá các file này đi. Tôi sử dụng lệnh bên dưới để xoá. Lệnh này sẽ tìm các file có định dạng sess_
trong thư mục /var/lib/lsphp/session/
và xoá đi. Bạn không thể sử dụng rm -rf để xoá file sẽ gặp lỗi -bash: /usr/bin/rm: Argument list too long
find /var/lib/lsphp/session/ -name 'sess_*' -delete
Ngoài ra bạn có thể copy script bên dưới để xoá. Script này được viết bởi usmannasir cũng chính là tác giả của CyberPanel.
bash <(curl https://raw.githubusercontent.com/usmannasir/cyberpanel/stable/CPScripts/setup_php_sessions.sh)
Bước 3: Đặt cron xoá
Bây giờ tôi sẽ đặt cron để xoá tự động theo lịch, và tôi sẽ đặt chạy 30 phút 1 lần.
Để đặt cron job chạy mỗi 30 phút, bạn cần thêm chúng vào crontab của hệ thống. Bạn có thể mở crontab bằng lệnh sau:
crontab -e
Sau đó, thêm dòng sau vào cuối file:
*/30 * * * * find /var/lib/lsphp/session/ -name 'sess_*' -delete
Đây sẽ đặt cron job để thực hiện hai lệnh đó mỗi 30 phút một lần. Đảm bảo lưu và thoát khỏi trình soạn thảo. Hệ thống sẽ tự động áp dụng cron job này.