Назад | Перейти на главную страницу

Как остановить скрипт по прошествии определенного максимального времени?

Ежедневно делаю резервные копии на S3. Я хотел бы использовать пропускную способность только с 20:00 до 8:00. Любой отдельный запуск может занять больше 12 часов, потому что наша загрузка некачественная. Я не беспокоюсь о произвольном убийстве s3cmd, потому что он правильно восстановится при следующем запуске.

Мой crontab будет выглядеть так:

# 0 20 * * * s3cmd sync FOO s3://MyBucket

Как мне проверить и остановить его, если сейчас 8 утра. В идеале я хотел бы сделать что-то вроде:

# 0 20 * * * time --limit 12H "s3cmd sync FOO s3://MyBucket"

Я использую Ubuntu Server.

Спасибо!

РЕДАКТИРОВАТЬ:

На основании ответа квантов. Для нескольких команд загрузки, я думаю, мне следует сделать?

# 0 20 * * * s3cmd sync FOO s3://MyBucket; s3cmd sync BAR s3://MyBucket; s3cmd sync FOOBAR s3://MyBucket;
# 0 8 * * * pkill s3cmd; sleep 1; pkill s3cmd; sleep 1; pkill s3cmd;

?

РЕДАКТИРОВАТЬ:

НМ, мне больше нравится тайм-аут.

РЕДАКТИРОВАТЬ:

Вот слабое место решения тайм-аута. Если у меня есть 12 резервных копий и 12-часовое окно для этого, я не обязательно необходимость выделить 1 час на резервную копию. Некоторое резервное копирование может занять 5 часов, около 20 минут. Мне все равно. Все, что меня волнует, это в 8 утра все останавливается. Я не верю, что опция тайм-аута позволяет этой гибкости адаптивно устанавливать значение тайм-аута. Опция kill, основанная на ответе квантов, должна справиться с этим.

вы, вероятно, хотите timeout команда.

timeout 12h s3cmd sync FOO s3://MyBucket

man timeout Чтобы получить больше информации.

по крайней мере, в Fedora он устанавливается с пакетом coreutils, который у вас должен быть по умолчанию.