Execute script when disk space is low
Is there a smart way to execute a script when disk space is low? I know I can manually check disk space, but it seems like a common problem to want to delete log files when disk space is low (for example) which is what I want to do.
You can use df
and a one-line shell script.
First, we need to tell df
to only print the percentage used:
df / --output='pcent'
Combine this with grep to get only the number:
df / --output='pcent' | grep -o "[0-9]*"
This will yield e.g. "55" if the disk has been filled by 55%.
Now in the crontab, we can use it like this:
@daily sh -c "if [ $(df / --output='pcent' | grep -o "[0-9]*") -gt 90 ]; then docker system prune -af; fi
In this example, we run docker system prune -af
if the disk has been filled by more than 90%. Adjust as needed.
If you are not specifically concerned about your log files, you could put a script to check the disk space in the cron.
Automatically clearing old logs is what logrotate
is for.