我正在使用nodejs的wget()监视IP列表,使用"node-wget"。
确切的命令是
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"
不幸的是,在运行我的应用程序一段时间后.js,我收到"EMFILE,打开的文件太多"
目录"/tmp/wget"是空的,但是..."LSOF |格雷普
·/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) => {
node-wget
使用fs.createWriteStream()
函数,根据API文档,该函数在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