仅当服务未运行时如何尝试启动服务?(Linux)

Jad*_*ias 3 linux bash

我知道我必须计算有多少实例正在运行:

ps x | grep apache2 | wc -l 
Run Code Online (Sandbox Code Playgroud)

结果如果它正在运行:2,否则:1

我也知道有一个叫命令test,我可以用它来进行验证,但我不知道如何使用testwc

mct*_*ylr 5

大多数 Linux 发行版上的启动脚本通过在启动时保存服务(守护进程)的进程 ID来处理这个问题。

这些 PID 通常存储在/var/run/. 例如,在我的系统上,Apache2 将其原始或父进程 ID(对预分叉的进程有用)存储在/var/run/apache2.pid. 因此,您可以向进程发送诸如SIGHUPSIGSTOP之类的信号,以发出配置重新加载或停止服务(守护进程)的信号。

帮助您进行ps ax样式过程搜索的一个注意事项是使用一个小技巧来转义用于匹配的 grep 的正则表达式模式,使其与自身不匹配。例如ps ax | grep [a]pache2 | wc -l

man test为您提供test命令的基础知识。对于 shell 脚本中的简单任务,最好避免依赖于您正在使用的 shell。通常对于基本脚本/bin/sh建议针对 Borne Shell ( )编写脚本,因为这往往是最流行的最小公分母。

#!/bin/sh

RC= `ps ax | grep [a]pache2 | wc -l`

if [ $RC -gt 0 ]; then
  kill -SIGSTOP `cat /var/run/apache2.pid`
fi
Run Code Online (Sandbox Code Playgroud)