Как написать сценарий оболочки, который будет получать URL-адрес один раз, а затем получать второй URL-адрес каждые две минуты в течение 1 часа

Я новичок в написании сценариев оболочки.

Я пытаюсь каким-то образом настроить задание, которое будет получать один URL-адрес один раз для запуска задачи, а другой URL-адрес каждые Через 2 минуты, чтобы задача оставалась активной.

Пока мне удалось заставить работать первый URL без проблем, проблема заключается в том, что второй URL wget повторяется каждые 2 минуты в течение 1 часа.

Я попытался включить cron в сценарий .sh, как я видел, предлагалось в другом месте, например

*/2 * * * * wget $url

, но терминал просто выдает его с ошибкой «нет такого файла или каталога».

Какой лучший способ сделать это?

0
задан 2 December 2020 в 17:31

3 ответа

Как предложили @Fiximan и @steeldriver, другой вариант - запустить wget в цикле в течение 1 часа:

COUNT=0
while [ $COUNT -lt 30 ]; do
  wget $url
  sleep 120
  COUNT=$((COUNT + 1))
done

Обратите внимание, что сценарий, содержащий этот код, должен запускаться с использованием #! / bin / bash , а не #! / bin / sh .

1
ответ дан 4 January 2021 в 08:15

Строку * / 2 * * * * wget $ url нужно поместить в ваш crontab, чтобы Работа. Сначала вы должны вывести текущий crontab, добавить к нему строку и установить его как новый crontab.

Это можно сделать, например. используя следующие команды:

crontab -l >/tmp/cronfile
echo "*/2 * * * * wget $url" >>/tmp/cronfile
crontab /tmp/cronfile

Первая команда может выводить "no crontab for username " на stderr, если в настоящее время crontab не определен, чтобы избежать этого, вы можете перенаправить stderr на / dev / null вот так:

crontab -l >/tmp/cronfile 2>/dev/null

Имейте в виду, что выполнение вышеуказанных строк приведет к тому, что операция wget будет повторяться навсегда , т.е. пока вы не удалите его вручную из crontab. Если вы хотите, чтобы он автоматически удалялся через 1 час, вам необходимо создать задание at , которое удалит wget из вашего crontab через 1 час:

at now +1hour <<EOF
crontab -l | grep -v wget | crontab -
EOF
0
ответ дан 4 January 2021 в 08:15

В файле сценария (.sh) вы можете создать цикл, который будет работать в течение 1 часа (3600 секунд) с двухминутной паузой (120 секунд).

# Initialize seconds variable
seconds=0
# Loop until 1 hour is done
while [[ $seconds < 3600 ]]; do
    seconds="$(($seconds + 120))"
    sleep 120
    wget $url
done

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

1
ответ дан 4 January 2021 в 08:15

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

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