Я ученый в области вычислений, и я выполняю много длительных вычислений в Linux. В частности, я запускаю моделирование молекулярной динамики (MD) с использованием пакета GROMACS. Это моделирование может занять несколько дней или недель, например, на 8–24 ядрах. У меня есть доступ к нескольким узлам кластера, что означает, что в любой момент времени я запускаю приблизительно 4 или 5 заданий (каждое на другом узле и каждое на 8-24 ядрах).
Проблема в том, что моделирование занимает переменное количество времени. Мне нравится, чтобы все узлы работали над симуляциями круглосуточно, но чтобы начать новое моделирование, мне нужно войти в систему с помощью терминала и выполнить некоторую ручную работу. Но я всегда забываю, сколько времени осталось в симуляции, поэтому я всегда заканчиваю тем, что постоянно проверяю их.
Есть ли способ получить электронное письмо, когда процесс Linux завершится? Может ли быть программа для Linux, которая делает это? Таким образом, я бы знал, когда войти в систему с терминала и подготовить следующую симуляцию.
Я использую Ubuntu Linux. Спасибо за ваше время.
Ответы:
Задания, отправленные
at
демону, отправят вам любой вывод из stderr и stdout после завершения. Он также может быть настроен на отправку почты, даже если задание не имеет выходных данных. Он также имеет преимущество в том, что работает без управляющего терминала, поэтому вам не нужно беспокоиться о влиянии закрытия терминала на работу.пример:
Когда это задание будет завершено, пользователь, отправивший задание, получит электронное письмо, и, если вообще будет какой-либо вывод, вы получите его. Вы можете изменить получателя электронной почты, изменив
LOGNAME
переменную среды.at
имеет пакетный режим, в котором вы можете ставить в очередь задания для запуска, когда система не занята. Это не очень хорошая система очередей, когда несколько пользователей борются за ресурсы, но, тем не менее, если вы хотите запускать задания с ней:По умолчанию задания не будут запускаться, если нагрузка на систему не будет ниже 1,5, но этот показатель нагрузки можно будет отрегулировать (и я бы сказал, что с 24 ядрами вы должны). Они могут работать параллельно, если они не увеличивают loadavg сверх предела нагрузки (опять 1,5 по умолчанию), или если они индивидуально увеличивают loadavg свыше 1,5, они будут работать последовательно.
Вы можете просмотреть очередь заданий с помощью
atq
и удалить задания с помощьюatrm
Ответить на зависимости:
atd
демона (ps -ef|grep atd
)atd
(не отклонено/etc/at.deny
//etc/at.allow
конфигурации)sendmail
МТАБольшинство систем не имеют проблем с этими требованиями, но стоит проверить.
источник
Да, есть
Где -s "текст" - тема, эхо дает почте некоторый текст для отправки вам.
источник
mail
требует, чтобы локальный MTA был правильно настроен. Это легкое и простое решение.mail
чтобы отправить вам вывод команды:{ command; echo Done; } | mail -s "subject" recipient@example.com
screen
илиtmux
, но может быть обидно, когда терминал открыт где-то на несколько дней / недель без него. Решение сat
для управления заданиями будет также заботиться об этой проблеме.&
в конце команды, чтобы заставить его работать в фоновом режиме .sleep 30 && echo "Process done" | mail -s "Process done" mail@domain.tld &
nohup
чтобы отсоединить их, но вы также потеряете способность продолжать контролировать его из оболочки. Это частично для чегоtmux
. Он отделяет запущенные процессы от вашего активно подключенного и просматриваемого сеанса терминала, в то же время позволяя вам нормально взаимодействовать с ними.Я бы порекомендовал установить скрипт Python для отправки электронной почты, их очень легко написать и настроить правильные почтовые серверы для любой службы, которую вы используете. Они выглядят примерно так:
Используйте это в сочетании с оператором трубы, предложенным в других ответах.
Еще одно отличное решение этой проблемы - использование Pushover . Pushover - «Pushover позволяет легко отправлять уведомления в режиме реального времени на устройства Android и iOS». Я установил простой скрипт, который использовал простой API для отправки сообщения на мой телефон после завершения сборки.
источник
Вы также можете использовать
trap
команду для отправки почты при выходе из процесса, или при прерывании, зависании или при завершении процесса. Вот код, который вы должны поместить вверху вашего скрипта.Arun
источник
Я написал process_watcher.py
В настоящее время тело письма выглядит так:
Устраните проблему с GitHub, если вам нужны какие-либо улучшения.
источник
fg ‹PID›; mail -s Completed to@example.com <<< 'Message here'
.У меня есть доморощенный сценарий, который работает для меня. Использование:
Он отправит электронное письмо со значимой информацией по теме и с выводом процесса в теле.
Инструкции по установке находятся на главной странице репозитория GitHub - в настоящее время для всех сценариев создается символическая ссылка
~/bin
.источник
Предполагая, что ваша программа уже запущена, используйте bash + pgrep, чтобы посмотреть ее.
источник
Несколько лет назад я создал этот псевдоним (в csh я теперь использую его в tcsh):
alias shunt "( \!* | Mail -s 'Output of: \!*' $user) >& /dev/null &"
Он требует, чтобы он
Mail
был установлен и работал в вашей системе, но имеет то преимущество, что ваша команда запускается точно так же, как и из командной строки (включая псевдонимы, расширения тильды и т. Д.) - когда вы запускаете задание с использованиемat
илиcron
запускается по умолчанию окружение, которое может быть достаточно различным, чтобы вызвать сбой вашего скрипта или предоставить необычный вывод (меня это укусилоcron
много раз)источник