检测特定的node.js脚本是否从bash运行

Red*_*dro 3 bash cron node.js

读作: 从bash中检测(如果特定的node.js脚本正在运行).


我有一个服务器在某些操作和某些cron间隔上运行特定的node.js脚本.

该脚本可能需要几个小时才能完成,但不应该同时运行多次.

是否有一种方法shbash检测如果特定的脚本已经运行?


处理

简单地运行(if)pidof node将不起作用,因为可能有其他不相关的节点脚本在运行.

pidfile进程文件

我能想到的最接近的半解决方案是touch /tmp/nodescript.lock,只有在脚本不存在时才运行.但显然/tmp没有(总是)在服务器崩溃/重启时得到清理.

秘密选项3号

也许还有其他一些我不知道的简单方法.也许我可以为进程提供某种静态标识符,当进程发生时它就消失了.有任何想法吗?

Tim*_*Tim 6

当您使用nodejs调用脚本时,它将显示在进程列表中,例如:

user       773 68.5  7.5 701904 77448 pts/0    Rl+  09:49   0:01 nodejs scriptname.js

所以你可以ps用一个简单的bash脚本检查它的存在:

#!/bin/bash

NAME="scriptname.js" # nodejs script's name here
RUN=`pgrep -f $NAME`

if [ "$RUN" == "" ]; then
 echo "Script is not running"
else
 echo "Script is running"
fi
Run Code Online (Sandbox Code Playgroud)

根据您的需要进行调整并放入cron.