Bash Script to Delete PHP Session Files and Free Inodes

Posted on February 16, 2017 at 12:50 am

Use “df -i” command to view inodes usage:

Filesystem       Inodes   IUsed    IFree IUse% Mounted on
/dev/sda2       1310720 1310720        0  100% /

That means you ran out of inodes! Most probably PHP sessions are the issue.

A quick command to delete all sess_* files on /var/lib/php/sessions is this:

find /var/lib/php/sessions -type f -cmin +24 -name "sess_*" -exec rm -f {} \;

But I would recommend you to use a bash script, keep reading below:

On your PHP.ini file you should see something like this:

; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
session.gc_maxlifetime = 1440
; NOTE: If you are using the subdirectory option for storing session files
;       (see session.save_path above), then garbage collection does not
;       happen automatically.  You will need to do your own garbage
;       collection through a shell script, cron entry, or some other method.

That means you need to clean the PHP sessions by yourself with a script.

Here is a bash script that can be used to delete PHP sessions:

# Export bin paths
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Get PHP Session Details
PHPSESSIONPATH=$(php -i 2>/dev/null | grep -w session.save_path | awk '{print $3}' | head -1);
PHPSESSIONLIFETIME=$(php -i 2>/dev/null | grep -w session.gc_maxlifetime | awk '{print $3}' | head -1);
    # Find and delete "expired" sessions
    find $PHPSESSIONPATH -type f -cmin +$PHPSESSIONLIFETIMEMINUTE -name "sess_*" -exec rm -f {} \;

Original script can be found here:
Script to delete PHP session files to keep inode usage to minimum

Then you need to add this to /etc/crontab to run the script every hour:

# Delete PHP sessions
0 * * * *   root    /root/ >/dev/null 2>&1

Receive updates via email

Other Posts

Updated Posts