linux - 用于检查进程是否正在运行的 Shell 脚本

标签 linux bash shell cron

发生了一些奇怪的行为,这让我认为可能发生了一些事情......

所以我有一个由 cron 执行的 shell 脚本。基本上它是为了检查 Node.js 是否正在运行。如果是,记录日期……如果不是,则什么都不记录!在我构建它的时候我测试了它并看到它在节点脚本运行时记录并且在它停止运行时没有记录...

最近我知道 Node 宕机了,我认为这是检查脚本是否完成了它应该做的事情的绝佳机会。它没有!而且它不会... :(

这是脚本:

#!/bin/bash

if ps -Al | grep -v grep | grep -q node 
then
        date > /etc/nodeCheck.log 
else
        date > /dev/null 
fi

这个 .sh 的权限是正确的,使用的路径存在,正在运行

$ps -A | grep -v grep | grep -q node

什么都不返回,

$echo $?
1

那么它不应该去 else block 吗?节点是启动后启动的进程。当由 cron 运行时或当我使用 SSH 时由我运行时,shell 脚本都无法正常工作。

我是否遗漏了一些基本的东西?

TIA

尼科

最佳答案

除非您正在运行 BSD ps,否则您应该能够使用 -C 标志或 pgrep

-C cmdlist      Select by command name. This selects the processes whose executable 
                name is given in cmdlist.

例如,

if ps -C node > /dev/null
then
        date > /etc/nodeCheck.log 
else
        date > /dev/null 
fi

if pgrep node > /dev/null
then
        date > /etc/nodeCheck.log 
else
        date > /dev/null 
fi

关于linux - 用于检查进程是否正在运行的 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24501458/

相关文章:

linux - 在 linux 中使用 while 循环一个一个地测试函数参数

bash - 比较两个文件中的值

linux - 如何将 shell 变量作为命令行参数传递给 shell 脚本

python - Ansible:读取属性值并访问它的 XML 模块

bash - 用于 Windows 的 ubuntu 上的 Mosquitto mqtt

linux - 如何在 Virtualbox 中的 guest 操作系统中下降到命令行

bash - 如何从终端将文件上传到 Azurite?

linux - 在 Perl-Tk 中使用 Button 小部件执行命令

linux - 如何将 Python 哈希插入 sed 查询并写入文件?

linux - shell 脚本 : Generate Report Version