♩ 背景
随着网站体量的不断增大,很多缓存日志造成资源你的浪费,为此,想着写一个计划任务,定期删除没必要的缓存数据
♪ 操作指导
①. 新建一个可执行文件
touch /usr/local/bin/clear_log
注意,赋予权限:chmod 777 clear_log
②. 编辑 clear_log 文件,在其中添加类似下面的代码
#!/bin/sh
find /mnt/www/Application/Runtime/Logs -mtime +10 -name *.* -exec rm -rf {} \;
find /tmp -type f -mmin +120 -name *.log -exec rm -rf {} \;
解析:
find 后面紧跟的是要查找的目录,. 表示当前目录
-type f: 指定查找对象为文件
-name *.log: 指定查找对象名称以.log结尾
-mtime +10: 查找10天以前的老文件
-mmin +120: 查找120分钟(两小时)以前的老文件
-exec rm -rf {} ; :执行删除命令,这句注意,后面有个 {} ; 是必须的
③. 将 clear_log 文件加入到系统计划任务
# crontab -e
然后,输入:
# 每三十分钟执行一次
*/30 * * * * /usr/local/bin/clear_log
④. 保存代码后 ,再执行下面的命令,以保证计划任务的生效
# /etc/rc.d/init.d/crond restart
♫ 附录
①. 磁盘使用状况:
可通过 df -h 查看磁盘使用情况
通过 du -h --max-depth=1 查看对应目录下文件的资源占用情况
通过分析以上数据,判断哪个目录或者缓存、log文件占用资源大,进行后面的删除操作
②. 参考文章:
③. PHP 删除指定目录下的文件
在搜索本文解决方案时,发现,也可以使用代码进行文件的删除,比如我使用的是PHP,那么可以指定目录,进行删除其下的所有文件
/**
* 删除对应目录下的所有文件
* @param $path 传入目录
* 举例: delServerDir("/mnt/www/Application/Runtime/Logs/");
*/
function delServerDir($path){
//如果是目录则继续
if(is_dir($path)){
//扫描一个文件夹内的所有文件夹和文件并返回数组
$p = scandir($path);
foreach($p as $val){
//排除目录中的.和..
if($val !="." && $val !=".."){
//如果是目录则递归子目录,继续操作
if(is_dir($path.$val)){
//子目录中操作删除文件夹和文件
delServerDir($path.$val.'/');
//目录清空后删除空文件夹
@rmdir($path.$val.'/');
}else{
//如果是文件直接删除
unlink($path.$val);
}
}
}
}
}
在自己所定义的方法中,进行调用上述逻辑
最后,建议使用计划任务:【30 2 * * * /usr/bin/curl http://xxx.xxx.x.xxx/index/order/taskToDelRuntimeLogs】
具体的访问时间间隔自行修整即可
补充一个删除指定目录文件的方法:
/**
* PHP 删除指定的图片
* @param $filename 目标图片路径
* @return bool
*/
function deleteServerFile($filename)
{
if (file_exists($filename)) { //检查图片文件是否存在
$result = @unlink($filename);
return true;
// if ($result == true) {
// echo '删除成功';
// } else {
// echo '无法删除';
// }
} else {
return false;
//echo '找不到图片文件';
}
}
本文同步分享在 博客“moTzxx”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。