如何查找/杀死长时间运行的mongo脚本

我想我有一个长时间运行的mongo脚本来保存我的数据库,但我不确定。 我通过SSH连接到了Linux服务器,我运行这样的脚本:

mongo my_database my_script.js 

它开始匆匆离开,但它耗时太长,所以我按下Ctrl-C并放回到shell。 我以为脚本被杀了,但现在我看到它所包含的查询仍然在数据库上运行。

如何获得数据库当前正在运行的脚本列表并杀死它们? 我知道db.currentOpdb.killOp ,但实际的查询本身很快,我需要杀死在循环中运行它们的脚本。

从这里: https : //dba.stackexchange.com/questions/60029/how-do-i-safely-kill-long-running-operations-in-mongodb


这可能有点棘手,但事实上,MongoDBshell基本上是一个Javascript解释器给我们在过滤方面的不错的select。 这是我用来完成这个function:

 // kills long running ops in MongoDB (taking seconds as an arg to define "long") // attempts to be a bit safer than killing all by excluding replication related operations // and only targeting queries as opposed to commands etc. killLongRunningOps = function(maxSecsRunning) { currOp = db.currentOp(); for (oper in currOp.inprog) { op = currOp.inprog[oper-0]; if (op.secs_running > maxSecsRunning && op.op == "query" && !op.ns.startsWith("local")) { print("Killing opId: " + op.opid + " running over for secs: " + op.secs_running); db.killOp(op.opid); } } }; 

这只会消除超过maxSecsRunning阈值的查询,并且不会触及任何针对oplog所在的本地数据库运行的任何内容(因此也是涉及长时间运行的复制操作的数据库)。内部的条件是根据具体的需要更精确地针对目标操作。

代码也可以作为一个要点(我会记得在不断更新的基础上)。


这将帮助您针对特定的操作并终止相同的操作。