Jestem naukowcem obliczeniowym i przeprowadzam wiele długich obliczeń w systemie Linux. W szczególności prowadzę symulacje dynamiki molekularnej (MD) przy użyciu pakietu GROMACS. Te symulacje mogą trwać kilka dni lub tygodni, wykorzystując (na przykład) od 8 do 24 rdzeni. Mam dostęp do kilku węzłów klastra, co oznacza, że w danym momencie uruchamiam około 4 lub 5 zadań (każde na innym węźle i każdy na 8–24 rdzeniach).
Problem polega na tym, że symulacja zajmuje zmienną ilość czasu. Lubię, aby wszystkie węzły pracowały nad symulacjami przez całą dobę, ale aby rozpocząć nową symulację, muszę zalogować się przy użyciu terminala i wykonać trochę pracy ręcznej. Ale zawsze zapominam, ile czasu pozostało w symulacji, więc zawsze kończę na ciągłym sprawdzaniu ich.
Czy jest jakiś sposób na otrzymanie wiadomości e-mail po zakończeniu procesu Linux? Czy może istnieć program Linux, który to robi? W ten sposób wiedziałbym, kiedy zalogować się do terminala i przygotować następną symulację.
Używam Ubuntu Linux. Dziękuję za Twój czas.
Odpowiedzi:
Zadania przesłane do
at
demona wyślą do ciebie wszelkie dane wyjściowe ze stderr i stdout po zakończeniu. Można go również skonfigurować do wysyłania poczty, nawet jeśli zadanie nie ma danych wyjściowych. Ma również tę zaletę, że działa bez terminala sterującego, więc nie musisz się martwić o wpływ, jaki zamknięcie terminala będzie miało na zadanie.przykład:
Po zakończeniu tego zadania użytkownik, który je przesłał, otrzyma wiadomość e-mail, a jeśli w ogóle będzie jakaś informacja wyjściowa, otrzymasz ją. Możesz zmienić adresata wiadomości e-mail, zmieniając
LOGNAME
zmienną środowiskową.at
ma tryb wsadowy, w którym można kolejkować zadania do uruchomienia, gdy system nie jest zajęty. Nie jest to zbyt dobry system kolejkowania, gdy wielu użytkowników walczy o zasoby, ale mimo to, jeśli chcesz uruchamiać z nim zadania:Domyślnie zadania nie rozpoczną się, chyba że obciążenie systemu spadnie poniżej 1,5, ale wartość obciążenia można dostosować (i przy 24 rdzeniach powiedziałbym, że powinieneś). Mogą działać równolegle, jeśli nie podniosą loadavg powyżej limitu obciążenia (ponownie domyślnie 1.5), lub jeśli indywidualnie podniosą loadavg powyżej 1,5, będą działać szeregowo.
Możesz przeglądać kolejkę zadań za pomocą
atq
i usuwać zadania za pomocąatrm
Zależności odpowiedzi:
atd
demona (ps -ef|grep atd
)atd
(nie odmowa przez/etc/at.deny
//etc/at.allow
konfiguracje)sendmail
MTAWiększość systemów nie ma problemu z tymi wymaganiami, ale warto to sprawdzić.
źródło
Tak, jest
Gdzie tematem jest „tekst”, echo daje wiadomości e-mail tekst do wysłania.
źródło
mail
Komenda wymaga lokalnego MTA być prawidłowo skonfigurowany. To łatwe i proste rozwiązanie.mail
do przesłania wyniku polecenia:{ command; echo Done; } | mail -s "subject" [email protected]
screen
lubtmux
, ale może być drażliwe, aby mieć terminal otwarty gdzieś przez kilka dni / tygodni bez niego. Rozwiązanie problemuat
zarządzania zadaniami rozwiązałoby również ten problem.&
na końcu polecenia, aby działało w tle.sleep 30 && echo "Process done" | mail -s "Process done" [email protected] &
nohup
je rozłączyć, ale też stracić zdolność do dalszego kontrolowania go z muszli. Po to częściowotmux
jest. Oddziela uruchomione procesy od aktywnie połączonej i oglądanej sesji terminalu, jednocześnie umożliwiając normalną interakcję z nimi.Polecam ustawienie skryptu python do wysyłania wiadomości e-mail, bardzo łatwo jest napisać i skonfigurować odpowiednie serwery pocztowe dla dowolnej usługi, z której korzystasz. Wyglądają mniej więcej tak:
Użyj tego w połączeniu z operatorem potoku sugerowanym w innych odpowiedziach.
Innym świetnym rozwiązaniem, które znalazłem dla tego problemu, jest użycie Pushover . Pushover - „Pushover ułatwia wysyłanie powiadomień w czasie rzeczywistym na urządzenia z Androidem i iOS”. Skonfigurowałem prosty skrypt, który zoptymalizował łatwy interfejs API do wysyłania wiadomości na mój telefon po zakończeniu kompilacji.
źródło
Możesz także użyć
trap
polecenia do wysyłania poczty przy wyjściu z procesu, przerwie, rozłączeniu lub zakończeniu procesu. Oto kod, który musisz umieścić na górze skryptu.Bieg
źródło
Napisałem process_watcher.py
Obecnie treść wiadomości e-mail wygląda następująco:
Rozwiąż problem GitHub, jeśli potrzebujesz ulepszeń.
źródło
fg ‹PID›; mail -s Completed [email protected] <<< 'Message here'
.Mam domowy skrypt, który działa dla mnie. Stosowanie:
Wyśle wiadomość e-mail z istotnymi informacjami na temat oraz z danymi wyjściowymi procesu w treści.
Instrukcje instalacji znajdują się na stronie głównej repozytorium GitHub - obecnie dla wszystkich skryptów tworzone jest dowiązanie symboliczne
~/bin
.źródło
Zakładając, że twój program już działa, użyj bash + pgrep, aby go obejrzeć.
źródło
Wiele lat temu utworzyłem ten alias (w csh, teraz używam go w tcsh):
alias shunt "( \!* | Mail -s 'Output of: \!*' $user) >& /dev/null &"
Wymaga to
Mail
zainstalowania i działania w systemie, ale ma tę zaletę, że polecenie działa dokładnie tak samo, jak w wierszu poleceń (w tym aliasy, rozszerzenia tyldy itp.) - gdy uruchamiasz zadanie przy użyciuat
lubcron
działa domyślnie środowisko, które może być wystarczająco różne, aby spowodować awarię skryptu lub zapewnić nietypowe dane wyjściowe (byłem ugryziony przez tocron
wiele razy)źródło