Cronjob 仅在其他程序已运行时运行程序

Cronjob 仅在其他程序已运行时运行程序

如何仅当另一项服务已启动且程序本身尚未运行时运行 cronjob?重要的是,programm2 仅在 programm1 已启动后启动。

*/2 * * * * 检查 programm1 是否正在运行;检查 programm2 是否未运行;/etc/init.d programm2 start

答案1

您可以使用变量编写脚本$?。此变量包含最后一个程序的退出状态;因此,如果您运行systemctl status dnsmasq并且它处于活动状态,则运行echo $?将返回0,这意味着 true。如果它不处于活动状态,$?将返回非 0 答案,这意味着 false。

实现此功能的一个简单脚本是:

#/!bin/bash
x=1
while [ "$x" != "0" ]
do
 systemctl status (service to monitor)
 if [ "$?" = "0" ]
 then
  systemctl start (service to start)
  break
 else
  sleep 30
  continue
 fi
done

第 1 行 = 将变量设置为非零,以便可以从中运行循环

第 2 行 = 启动一个连续运行的循环(x 永远不能 = 0)

第 4 行 = 检查服务是否正在运行,设置$?为零或非零值

第 5 行开始 = 检查上一个命令的退出状态(检查服务是否正在运行)是真还是假。如果为真(零),则启动下一个服务并跳出循环。如果为假(非零),则返回循环的开始处并运行,直到所选服务正在运行。

您可以在启动时运行该脚本,也可以将其转变为自己的服务。

由于您正在启动/停止系统服务,因此您需要以 root 身份运行它(无论您选择哪种方式)。

相关内容