Bash-скрипт для периодического запуска и уничтожения приложения

У меня есть короткий сценарий, который должен запустить приложение, подождать час, затем убить его и подождать минуту. Он только запускает приложение. Я пробовал запускать скрипт как под обычным пользователем, так и под root, но ничего не помогло.

while (true); do
  ./app
  sleep 3600
  pkill -f app
  sleep 60
done
0
задан 15 June 2020 в 14:07

2 ответа

Проблема в том, что все команды выполняются от первой строки до последней по порядку. Таким образом, @Scott Stensland наставлял, что вы должны поместить его в фоновый режим через & (амперсанд), чтобы запустить таймер.

И, кроме того, я думаю, что получить PID вашего приложения через поиск по именам процессов - опасная практика, поскольку вы можете случайно убить программу, в названии которой содержится строка app . Поэтому более безопасный способ - использовать переменную ! для получения PID. Таким образом, ваш измененный скрипт теперь должен выглядеть следующим образом:

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

Когда вы помещаете процесс в фоновый режим через & , он попадает в список job родительского процесса bash и через ! вы можете получить PID последней работы. Так что это безопасно.

2
ответ дан 19 June 2020 в 21:24

You could consider using the timeout command:

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.

ex.

#!/bin/bash

while :
do
  timeout 1h ./app
  sleep 1m
done
2
ответ дан 19 June 2020 в 21:24

Другие вопросы по тегам:

Похожие вопросы: