所以我想创建一个删除文件夹及其内容的脚本,但是在执行此操作时可能会创建新文件。做这个的最好方式是什么?
一些例子是 - 我们有“缓存”文件夹,我想删除整个缓存,但是在执行此操作时,缓存文件夹中创建了更多文件,并且它永远不会为空,因此无法删除。
将目录移出位置(/tmp
例如)。然后删除它。移动是原子的,快速的(因为它只是文件系统上的指针更改,并且无论文件夹中的内容如何,都不会真正涉及繁重的磁盘 I/O)。
为了获得针对任何类型问题的最佳弹性,您应该创建如下目录结构:
/var/www/website/
releases/
1111/
1112/
1113/
current_release/
假设您的网站当前位于/var/www/website/releases/1113/
. DocumentRoot
您的apache 应该设置有一个/var/www/website/current_release/
符号链接到/var/www/website/releases/1113
当您需要清除缓存时,您应该做的是部署一个新版本,例如/var/www/website/releases/1114
. 当 ti 被部署并且有一个空的缓存目录时,将符号链接翻转/var/www/website/current_release/
到你的新版本目录。
然后,Apache 将使用空缓存文件夹从新目录中提供文件。
这是完成此类事情的唯一真正原子方式,除了使服务器脱机(这通常不是清除缓存这样微不足道的事情的选择)。
这将是该问题的一种企业级解决方案,但它还具有允许您轻松回滚生产服务器的额外好处(只需将符号链接切换到以前的版本)。如果您非常关心这个问题,这似乎是过度设计,这是正确的方法。