Saya seorang ilmuwan komputasi, dan saya menjalankan banyak perhitungan yang panjang di Linux. Secara khusus, saya menjalankan simulasi dinamika molekul (MD) menggunakan paket GROMACS. Simulasi ini dapat berlangsung berhari-hari atau berminggu-minggu, berjalan pada (misalnya) 8 hingga 24 core. Saya memiliki akses ke beberapa node cluster, yang berarti bahwa pada waktu tertentu, saya menjalankan sekitar 4 atau 5 pekerjaan (masing-masing pada node yang berbeda, dan masing-masing pada 8-24 core).
Masalahnya adalah simulasi membutuhkan waktu variabel. Saya suka menjaga semua node bekerja pada simulasi sepanjang waktu, tetapi untuk memulai simulasi baru, saya perlu melakukan login dengan terminal dan melakukan beberapa pekerjaan manual. Tapi saya selalu lupa berapa banyak waktu yang tersisa dalam simulasi, jadi saya selalu berakhir memeriksa mereka.
Apakah ada cara saya bisa menerima email ketika proses Linux selesai? Mungkinkah ada program Linux yang melakukan ini? Dengan begitu saya akan tahu kapan harus login dengan terminal dan menyiapkan simulasi selanjutnya.
Saya menggunakan Ubuntu Linux. Terima kasih atas waktunya.
Jawaban:
Pekerjaan yang dikirimkan ke
at
daemon akan mengirimkan output kepada Anda dari stderr dan stdout setelah selesai. Itu juga dapat dikonfigurasi untuk mengirim email bahkan jika pekerjaan itu tidak memiliki output. Ini juga memiliki keuntungan berjalan tanpa terminal pengendali, jadi Anda tidak perlu khawatir tentang efek penutupan terminal terhadap pekerjaan.contoh:
Ketika pekerjaan ini selesai, pengguna yang mengirimkan pekerjaan akan menerima email, dan jika ada output sama sekali, Anda akan menerimanya. Anda dapat mengubah penerima email dengan mengubah
LOGNAME
variabel lingkungan.at
memiliki mode batch di mana Anda dapat mengantre pekerjaan untuk dijalankan ketika sistem tidak sibuk. Ini bukan sistem antrian yang sangat bagus ketika banyak pengguna bersaing memperebutkan sumber daya, tetapi jika Anda ingin menjalankan pekerjaan dengannya:Secara default pekerjaan tidak akan dimulai kecuali jika beban sistem di bawah 1,5, tetapi angka beban itu dapat disesuaikan (dan dengan 24 core saya katakan Anda harus). Mereka dapat berjalan secara paralel jika mereka tidak menundukkan loadavg di atas batas beban (1,5 default lagi), atau jika mereka secara individu menundukkan loadavg lebih dari 1,5, mereka akan berjalan secara serial.
Anda dapat melihat antrian pekerjaan dengan
atq
, dan menghapus pekerjaan denganatrm
Dependensi jawaban:
atd
daemon (ps -ef|grep atd
)atd
(tidak ditolak oleh/etc/at.deny
//etc/at.allow
konfigurasi)sendmail
MTA fungsionalSebagian besar sistem tidak memiliki masalah dengan persyaratan ini, tetapi ada baiknya untuk memeriksa.
sumber
Ya ada
Di mana -s "teks" adalah subjek, gema memberikan mail beberapa Teks untuk dikirim kepada Anda
sumber
mail
perintah tidak memerlukan MTA lokal untuk dikonfigurasi dengan benar. Ini adalah solusi yang mudah dan sederhana.mail
untuk mengirimkan kepada Anda output dari perintah:{ command; echo Done; } | mail -s "subject" [email protected]
screen
atautmux
, tetapi mungkin sensitif untuk memiliki terminal terbuka di suatu tempat selama berhari-hari / minggu tanpa itu. The solusi denganat
manajemen pekerjaan juga akan mengurus masalah itu.&
di akhir perintah untuk menjalankannya di latar belakang.sleep 30 && echo "Process done" | mail -s "Process done" [email protected] &
nohup
untuk memutuskan tautannya, tetapi Anda juga kehilangan kemampuan untuk terus mengendalikannya dari shell. Ini sebagian untuk apatmux
. Ini menceraikan proses yang berjalan dari sesi terminal Anda yang terhubung secara aktif dan dilihat sambil tetap membiarkan Anda berinteraksi dengan mereka secara normal.Saya akan merekomendasikan pengaturan skrip python untuk mengirim email, mereka sangat mudah untuk menulis dan mengkonfigurasi server mailing yang benar untuk layanan apa pun yang Anda gunakan. Mereka terlihat seperti ini:
Gunakan ini bersamaan dengan operator pipa yang disarankan dalam jawaban lain.
Solusi hebat lain yang saya temukan untuk masalah ini adalah menggunakan Pushover . Pushover - "Pushover membuatnya mudah untuk mengirim notifikasi real-time ke perangkat Android dan iOS Anda." Saya menyiapkan skrip sederhana yang memberikan API mudah untuk mengirim pesan ke ponsel saya ketika build saya selesai.
sumber
Anda juga dapat menggunakan
trap
perintah untuk mengirim email saat keluar dari proses, atau pada saat interupsi, hangup atau pada penghentian proses. Berikut adalah kode yang harus Anda tempatkan di bagian atas skrip Anda.Arun
sumber
Saya menulis process_watcher.py
Saat ini, badan email terlihat seperti:
Hentikan masalah GitHub jika Anda membutuhkan perbaikan.
sumber
fg ‹PID›; mail -s Completed [email protected] <<< 'Message here'
.Saya memiliki skrip buatan sendiri yang berfungsi untuk saya. Pemakaian:
Ini akan mengirim email dengan informasi yang bermakna dalam subjek, dan dengan output proses di dalam tubuh.
Petunjuk instalasi ada di halaman utama repo GitHub - saat ini untuk semua skrip tempat symlink dibuat
~/bin
.sumber
Dengan asumsi program Anda sudah berjalan, gunakan bash + pgrep untuk menontonnya.
sumber
Berabad-abad yang lalu, saya membuat alias ini (di csh, saya sekarang menggunakannya di tcsh):
alias shunt "( \!* | Mail -s 'Output of: \!*' $user) >& /dev/null &"
Itu mengharuskan yang
Mail
diinstal dan bekerja pada sistem Anda, tetapi memiliki keuntungan bahwa perintah Anda berjalan persis seperti dari baris perintah (termasuk alias, ekspansi tilde, dll) - ketika Anda menjalankan pekerjaan menggunakanat
ataucron
berjalan di bawah default lingkungan yang mungkin cukup berbeda untuk menyebabkan skrip Anda gagal atau memberikan hasil yang tidak biasa (saya sudah sering digigit oleh itucron
)sumber