用于定期启动和终止应用程序的 Bash 脚本

用于定期启动和终止应用程序的 Bash 脚本

我有一个简短的脚本,可以启动一个应用程序,等待一个小时,然后终止它并等待一分钟。它只会启动应用程序。我尝试以普通用户和 root 身份运行该脚本,但没有任何帮助。

while (true); do
  ./app
  sleep 3600
  pkill -f app
  sleep 60
done

答案1

问题是所有命令都是按顺序从第一行到最后一行执行的。因此,正如@Scott Stensland所提到的,您必须通过&(&) 将其置于后台才能启动计时器。

此外,我认为通过搜索进程名称来获取应用程序的 PID 是一种危险的做法,因为您可能会意外终止app名称中包含字符串的程序。因此,更安全的方法是使用变量!来获取 PID 。因此,您修改后的脚本现在应如下所示:

while (true); do
  ./app &
  app_pid=$!
  sleep 3600
  kill $app_pid
  sleep 60
done

当你将一个进程放入后台时,&它会进入工作父 bash 进程的列表,通过!它可以获取最后一个作业的 PID。所以它是安全的。

答案2

您可以考虑使用以下timeout命令:

NAME
       timeout - run a command with a time limit

SYNOPSIS
       timeout [OPTION] DURATION COMMAND [ARG]...
       timeout [OPTION]

DESCRIPTION
       Start COMMAND, and kill it if still running after DURATION.

前任。

#!/bin/bash

while :
do
  timeout 1h ./app
  sleep 1m
done

相关内容