Бесконечный цикл заданий cron с промежуточным выводом каждого задания

У меня есть программа, которая выводит вещи на стандартный вывод. Я использую cron, чтобы запланировать это, что хорошо, потому что я собираю материал, который он распечатывает по электронной почте, и выполняю статистическую работу над этим. Я хотел бы, чтобы это продолжалось по существу навсегда.

Как и в случае с вопросом 538622, я также хотел бы, чтобы задание было "повторно отправлено " после завершения. Это невозможно сделать с помощью скрипта с бесконечным циклом, потому что мне нужно постоянно собирать то, что приходит по электронной почте из cron.

Если возможно, я также хотел бы, чтобы N заданий выполнялось параллельно, когда на компьютере установлено N процессоров.

До сих пор я планировал запускать задания каждые X минут, но так как компьютер используется другими, это не очень эффективное использование времени, и существует риск заполнения машины моими заданиями, которые занимают все больше и больше времени (так что икс минут в не хватит).

Есть идеи, как это сделать?

1 ответ

Решение

На основе сценария в указанном вопросе вы можете получить выходные данные команды в файл и отправить содержимое файла по электронной почте после завершения одной итерации. В этом случае у вас может быть бесконечный цикл, и когда вы запускаете его, используя nohup в фоновом режиме, он может работать, пока работает хост.

Пример сценария (в данном случае называется parse.sh) может быть:

while true
do
    command &> /tmp/output_thread_$1
    cat /tmp/output_thread_$1 | mail -s "output from thread $1" email@recipient
done

Если вы вызываете скрипт с помощью

for thread in 1 2 3 4; do nohup parse.sh $thread & done;

где 4 - количество процессоров. Это запустит (в данном случае) 4 процесса, выполняющих ваши задачи

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