Бесконечный цикл заданий 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 процесса, выполняющих ваши задачи