2015-10-07 2 views
3

Я хочу запланировать команду, такую ​​как ./example каждые 6 минут, и когда исполняется 6 минут, она завершает процесс и запускает его снова. Как мне это сделать в Баше? Я запускаю CentOS.Запуск команды каждые 6 минут в Bash

+0

Почему у этого есть upvotes? Вообще? – tripleee

ответ

6

Я делаю cronjob каждые шесть минут и используя команду timeout, чтобы убить ее, скажем, 5 минут и 50 секунд.

Это пример правило кронтаба:

*/6 * * * * cd /path/to/your/file && timeout -s9 290s ./example 

Он изменяет рабочий каталог, где у вас есть свой сценарий, а затем выполняет сценарий. Обратите внимание, что я посылаю сигнал 9 (SIGKILL) с помощью флага -s9, что означает «немедленно прекратить». В большинстве случаев вам может потребоваться отправить SIGTERM вместо этого, что говорит сценарию «изящно выйти». Если это так, вы можете подумать о том, чтобы дать сценарию немного больше времени для выхода, уменьшив значение тайм-аута еще больше. Чтобы отправить SIGTERM вместо SIGKILL, просто удалите флаг -s9.

Вы редактировать кронтаб, запустив crontab -e

2

Заменить mycommand в поле ниже сценария ...

#! /bin/bash 

## create an example command to launch for demonstration purposes 
function mycommand { D=$(date) ; while true ; do echo $D; sleep 1s ; done; } 

while true 
    do 
    mycommand & PID=$! 
    sleep 6m 
    kill $PID ; wait $PID 2>/dev/null 
    done 

Каждые шесть минут, это убивает команду перезапускает его.

Используйте Ctrl-C как один из способов для завершения этой последовательности.

+0

Конечно, это решение должно контролироваться systemd, supervisord или аналогичным. –

+0

@ EmilVikström: Возможно, вы захотите сделать это, если это критическая * миссия *. Возможно, вы не захотите побеспокоиться об этом. – nobar

Смежные вопросы