【Nodejs教程精选】Nodejs临时文件回收器reap

从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发。Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎。chrome浏览器就基于V8,同时打开20-30个网页都很流畅。Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低。非常适合小型网站,个性化网站,我们自己的Geek网站!!

关于作者

  • 张丹(Conan), 程序员Java,R,PHP,Javascript
  • weibo:@Conan_Z
  • blog: http://blog.fens.me

  • email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/nodejs-gc-reap/

【Nodejs教程精选】Nodejs临时文件回收器reap

前言

生产环境中,临时目录总是容易被我们忽略考虑的问题。当通过服务器上传文件时,一般文件流先会产生在临时目录中,然后再通过重命名,复制等后续操作保存在到存储目录。我们总是会想,临时目录(/tmp)的文件,操作系统当空间不够的时候,会自动回收的,所以就放之不管。

可是操作系统的回收,并不是像人脑那么智能。也许就是在服务器IO最繁忙的时候,他发出了要回收临时目录的命令。服务器卡几秒,就真不好说了。特别是对于时时可靠性要求很高的系统,几秒都是不可忍受的。

让人脑来解决临时目录清理的问题吧!用reap只需几行命令。

目录

  1. reap介绍
  2. reap的命令使用
  3. reap程序开发

1. reap介绍

reap是一个简单小巧的临时文件回收器。reap有一个监控的调度,可以设置间隔时间,删除指定目录中的文件,并把日志打印到控制台。

一般情况服务都是在Linux环境,win也可以运行!

2. reap的命令使用

我的系统环境

  • Linux: Ubuntu 12.04.2 64bit Server
  • Node: v0.11.2
  • Npm: 1.2.21

全局安装reap

~ mkdir nodejs-reap && cd nodejs-reap

~ sudo npm install -g reap

/usr/local/bin/reap -> /usr/local/lib/node_modules/reap/bin/reap

npm WARN package.json cookie-signature@1.0.1 No repository field.

npm WARN package.json methods@0.0.1 No repository field.

npm WARN package.json range-parser@0.0.4 No repository field.

npm WARN package.json dateformat@1.0.2-1.2.3 No repository field.

npm WARN package.json bytes@0.2.0 No repository field.

npm WARN package.json pause@0.0.1 No repository field.

npm WARN package.json uid2@0.0.2 No repository field.

npm WARN package.json policyfile@0.0.4 'repositories' (plural) Not supported.

npm WARN package.json Please pick one as the 'repository' field

npm WARN package.json assert-plus@0.1.2 No repository field.

npm WARN package.json ctype@0.5.2 No repository field.

npm WARN package.json cheerio-select@0.0.3 No repository field.

npm WARN package.json github-url-from-git@1.1.1 No repository field.

reap@0.1.0 /usr/local/lib/node_modules/reap

├── ms@0.6.1

├── bytes@0.2.1

├── batch@0.4.0

├── debug@0.7.2

└── commander@1.2.0 (keypress@0.1.0)

reap的命令

~ reap -h

Usage: reap [options]

Options:

-h, --help output usage information

-t, --threshold file unlink threshold [1 hour]

-s, --single run a single time and exit

  • -h, –help: 打印帮助信息
  • -t, –threshold: 后台运行,设置间隔时间(ms)
  • -s, –single: 单次运行

我们新建两个目录,用来测试。

  • tmp目录:临时目录,被reap监控并清空
  • files目录:源文件目录,放置一些文件

~ mkdir tmp

~ mkdir files

~ ls -l files/

-rw-r--r-- 1 conan conan 303 8月 2 09:50 github.Rproj

-rw-rw-r-- 1 conan conan 821 7月 31 20:19 q.log

-rw-r--r-- 1 conan conan 195 8月 2 10:07 sayHello.r

-rw-r--r-- 1 conan conan 2045 8月 2 11:41 script.r

-rw-rw-r-- 1 conan conan 4510 4月 21 13:43 vbox.log

模拟/tmp产生临时文件

~ cp files/* tmp/

每10秒扫描./tmp目录,并清空文件

~ reap -t 10s ./tmp

rm /home/conan/nodejs/nodejs-reap/tmp/github.Rproj 303b

rm /home/conan/nodejs/nodejs-reap/tmp/q.log 821b

rm /home/conan/nodejs/nodejs-reap/tmp/sayHello.r 195b

rm /home/conan/nodejs/nodejs-reap/tmp/script.r 2kb

rm /home/conan/nodejs/nodejs-reap/tmp/vbox.log 4.4kb

0 files

0b total

0 files

0b total

rm /home/conan/nodejs/nodejs-reap/tmp/github.Rproj 303b

rm /home/conan/nodejs/nodejs-reap/tmp/q.log 821b

rm /home/conan/nodejs/nodejs-reap/tmp/sayHello.r 195b

rm /home/conan/nodejs/nodejs-reap/tmp/script.r 2kb

rm /home/conan/nodejs/nodejs-reap/tmp/vbox.log 4.4kb

3. reap程序开发

本地安装reap

~ npm install reap

reap@0.1.0 node_modules/reap

├── ms@0.6.1

├── bytes@0.2.1

├── batch@0.4.0

├── debug@0.7.2

└── commander@1.2.0 (keypress@0.1.0)

增加文件:app.js,通过nodejs来控制reap.

~ vi app.js

var Reaper = require('reap');

var threshold = 1000;//ms

var reaper = new Reaper({threshold:1000});

reaper.watch('./tmp');

reaper.on('remove', function(file){

console.log(' rm %s %sb', file.path, file.size);

});

setInterval(function(){

console.log("\n"+new Date());

reaper.start(function(err, files){

if (err) throw err;

console.log(' %d files\n', files.length);

});

}, threshold);

通过node运行reap, 每1s清理一次。

~ node app.js

Wed Sep 25 2013 12:25:44 GMT+0800 (CST)

0 files

Wed Sep 25 2013 12:25:45 GMT+0800 (CST)

rm /home/conan/nodejs/nodejs-reap/tmp/github.Rproj 303b

rm /home/conan/nodejs/nodejs-reap/tmp/q.log 821b

rm /home/conan/nodejs/nodejs-reap/tmp/sayHello.r 195b

rm /home/conan/nodejs/nodejs-reap/tmp/script.r 2045b

rm /home/conan/nodejs/nodejs-reap/tmp/vbox.log 4510b

5 files

Wed Sep 25 2013 12:25:46 GMT+0800 (CST)

0 files

Wed Sep 25 2013 12:25:47 GMT+0800 (CST)

0 files

Wed Sep 25 2013 12:25:48 GMT+0800 (CST)

0 files

Wed Sep 25 2013 12:25:49 GMT+0800 (CST)

rm /home/conan/nodejs/nodejs-reap/tmp/q.log 821b

rm /home/conan/nodejs/nodejs-reap/tmp/github.Rproj 303b

rm /home/conan/nodejs/nodejs-reap/tmp/script.r 2045b

rm /home/conan/nodejs/nodejs-reap/tmp/sayHello.r 195b

rm /home/conan/nodejs/nodejs-reap/tmp/vbox.log 4510b

5 files

另一个shell 模拟产生临时文件

~ cp files/* tmp/

简单的小工具,有时候可以帮我们解决复杂的问题。大型软件架构设计,需要做得更细!!

转载请注明出处:
http://blog.fens.me/nodejs-gc-reap/

【Nodejs教程精选】Nodejs临时文件回收器reap

以上是 【Nodejs教程精选】Nodejs临时文件回收器reap 的全部内容, 来源链接: utcz.com/a/129982.html

回到顶部