我正在使用“ node-wget”,使用来自nodejs的wget()监视IP列表。
确切的命令是
wget( {
url: szTargetIP, // as "http://10.139.238.167
dest: '/tmp/wget/',
timeout: 2000
},
在扫描文件之后(如/tmp/wget/10.139.238.167),我知道了
fs.unlink( szIPfn, (err) => { // delete file
if (err) {
if ( err.code === 'ENOENT' ) {
mConsole( '--- file '+ szIPfn +' does not exist' ) ;
} else {
throw err ; // fatal error : stop
} ;
} else {
mConsole( '+++ successfully deleted ' + szIPfn ) ;
} ;
} ) ; // unlink
我总是登录“ +++成功删除/tmp/wget/10.139.238.167”
不幸的是,在运行我的app.js一段时间后, 我收到“ EMFILE,打开的文件太多”
目录“ / tmp / wget”为空,但是显示“ lsof | grep wget”
/tmp/wget/10.139.238.167 (deleted)
有什么想法吗?
*完整代码*
wget( {
url: szTargetIP,
dest: '/tmp/wget/',
timeout: 2000
},
function (error, response, body) {
szNow = genTimeStamp() ; // get timestamp
if (error) {
console.log('--- wget() error:');
} else {
console.log('+++ wget() ok');
} ; // no error = wget() ok
}
) ; // wget()
var szIPfn = '/tmp/wget/' + iWget_IP ;
fs.unlink( szIPfn, (err) => {
答案 0 :(得分:2)
node-wget
使用fs.createWriteStream()
功能,根据API Documentation,在error
或finish
事件中自动关闭目标文件。
node-wget
还使用request
模块,该模块从不发出finish
事件,而只会发出complete
事件。
然后,您的wget命令的目标文件将永远不会关闭。
只需添加类似:
var szIPfn = '/tmp/wget/' + iWget_IP ;
fs.close(szIPfn, err => {
if (err) thow err;
fs.unlink( szIPfn, (err) => { // delete file
if (err) {
if ( err.code === 'ENOENT' ) {
mConsole( '--- file '+ szIPfn +' does not exist' ) ;
} else {
throw err; // fatal error : stop
}
}else{
mConsole( '+++ successfully deleted ' + szIPfn ) ;
}
}); // unlink
}); // close