Saya tidak tahu bagaimana melakukannya dengan systemd, tetapi dengan monit Anda dapat melihatnya menonton suatu proses, dan itu dapat mengirimkan pemberitahuan jika id proses berubah.
Zoredache
Jawaban:
16
Pertama, Anda memerlukan dua file: file yang dapat dieksekusi untuk mengirim surat dan layanan. Untuk memulai file yang dapat dieksekusi. Untuk contoh ini, executable hanyalah skrip shell menggunakan sendmail:
Apa pun yang dapat dieksekusi yang Anda gunakan, mungkin perlu setidaknya dua argumen seperti script shell ini: alamat untuk mengirim dan file unit untuk mendapatkan status. The .servicekita buat akan melewati argumen ini:
/etc/systemd/system/[email protected]:
[Unit]
Description=status email for %i to user
[Service]
Type=oneshot
ExecStart=/usr/local/bin/systemd-email address %i
User=nobody
Group=systemd-journal
Di mana pengguna adalah pengguna yang diemail dan alamat adalah alamat email pengguna itu. Meskipun penerima adalah hard-coded, file unit untuk dilaporkan dilewatkan sebagai parameter instance, sehingga layanan yang satu ini dapat mengirim email ke banyak unit lainnya. Pada titik ini Anda dapat mulai [email protected]memverifikasi bahwa Anda dapat menerima email.
Kemudian cukup edit layanan yang Anda inginkan untuk email dan tambahkan OnFailure=status-email-user@%n.serviceke [Unit]bagian. %nmeneruskan nama unit ke templat.
Tetapi @Dave tidak memerlukan layanan lain. Dia ingin layanan yang sudah dia gunakan untuk dapat mengirim email pada setiap awal / restart. Untuk itu, ada opsi ExecStartPost.
Jaroslav Kucera
@JaroslavKucera Saya pikir ini untuk memutuskannya ke OP ... :) Juga, saya tidak yakin apakah ExecStartPostini pilihan yang tepat: Ini juga akan memicu setelah awal yang "normal", tidak hanya jika terjadi kegagalan, kan ?
gf_
Saya tertarik mengapa suara turun ini dinaikkan - harap angkat suara Anda dan angkat bicara!
gf_
Karena pertanyaannya bukan tentang layanan lain, tetapi modifikasi layanan yang ada. Ya, ExecStartPost akan memicu pengiriman email bahkan di awal yang normal. Saya tidak mengetahui apa pun yang hanya akan berfungsi saat restart.
Jaroslav Kucera
@JaroslavKucera Yah, sepertinya OP tidak setuju, tapi tentu saja, simpan pendapat Anda.
gf_
2
Solusi yang diajukan oleh @gf_ bekerja dengan baik untuk situasi kami menjalankan clickhouse di CentOS7. Clickhouse mogok agak sering pada kami sehingga kami harus menjalankannya kembali secara otomatis dan diberi tahu saat restart terjadi. Meskipun agak kikuk untuk menambahkan layanan kedua ke systemd, ini diperlukan karena desain systemd.
Yang sedang berkata, solusi ini, ketika dikombinasikan dengan auto-restart, berhenti bekerja untuk kami ketika kami digunakan untuk CentOS8. Ini karena systemd v239 yang dikirim dalam C8 memperkenalkan perubahan ke OnFailure=semantik ketika dikombinasikan dengan konfigurasi non-default Restart=( Restart=on-failuredalam kasus kami). OnFailure=Perilaku baru hanya memicu layanan sekali pakai jika restart gagal sepenuhnya, tidak hanya setelah crash. Perilaku yang lebih baru ini akan dengan senang hati memulai kembali layanan, tetapi kami tidak akan mendapatkan email karena OnFailure=tidak lagi dipanggil.
Perhatikan harapan utama kami: kami ingin systemd memulai kembali proses DAN mengirim pemberitahuan email. Pembaruan v239 membuat solusi kami sebelumnya yang dikutip oleh gf_ tidak berfungsi lagi. Untungnya kami berhasil.
Solusi kami adalah gunakan ExecStopPostuntuk menjalankan skrip notifikasi email. Ini berfungsi dengan baik, tetapi sekarang masalah baru muncul: pemberitahuan email dikirim ketika layanan clickhouse dimulai secara normal, seperti pada startup server. Meskipun bukan masalah besar, idealnya kami ingin mendapatkan notifikasi email hanya pada crash. Kami dapat mencapai ini dengan menambahkan kode berikut ke skrip email kami:
# Don't do anything if the service intentionally stopped successfully.
if [ $SERVICE_RESULT == "success" ]; then
exit
fi
... $SERVICE_RESULTadalah variabel lingkungan yang dipasok oleh systemd ke proses target ExecStopPost. Dengan memeriksa successhasilnya, kami menganggap bahwa permohonan ini berasal dari startup normal, atau shutdown, dan tidak melakukan apa pun. Pada nilai lain, seperti signal, skrip akan melanjutkan pengiriman email. Nilai-nilai yang mungkin dari variabel ini dinyatakan dalam dokumentasi .
Terima kasih kepada gf_ untuk solusi awal. Saya harap orang-orang menemukan pembaruan saya bermanfaat untuk CentOS8. Beberapa tautan yang membantu saya:
Pertanyaan ini bukan tentang booting, tetapi tentang restart layanan, yang mungkin terjadi beberapa saat setelah booting. Karena itu, saya tidak yakin apakah jawaban Anda dapat membantu.
Jawaban:
Pertama, Anda memerlukan dua file: file yang dapat dieksekusi untuk mengirim surat dan layanan. Untuk memulai file yang dapat dieksekusi. Untuk contoh ini, executable hanyalah skrip shell menggunakan
sendmail
:Apa pun yang dapat dieksekusi yang Anda gunakan, mungkin perlu setidaknya dua argumen seperti script shell ini: alamat untuk mengirim dan file unit untuk mendapatkan status. The
.service
kita buat akan melewati argumen ini:Di mana pengguna adalah pengguna yang diemail dan alamat adalah alamat email pengguna itu. Meskipun penerima adalah hard-coded, file unit untuk dilaporkan dilewatkan sebagai parameter instance, sehingga layanan yang satu ini dapat mengirim email ke banyak unit lainnya. Pada titik ini Anda dapat mulai
[email protected]
memverifikasi bahwa Anda dapat menerima email.Kemudian cukup edit layanan yang Anda inginkan untuk email dan tambahkan
OnFailure=status-email-user@%n.service
ke[Unit]
bagian.%n
meneruskan nama unit ke templat.Sumber: archlinux wiki: timer sistemd MAILTO
sumber
ExecStartPost
ini pilihan yang tepat: Ini juga akan memicu setelah awal yang "normal", tidak hanya jika terjadi kegagalan, kan ?Solusi yang diajukan oleh @gf_ bekerja dengan baik untuk situasi kami menjalankan clickhouse di CentOS7. Clickhouse mogok agak sering pada kami sehingga kami harus menjalankannya kembali secara otomatis dan diberi tahu saat restart terjadi. Meskipun agak kikuk untuk menambahkan layanan kedua ke systemd, ini diperlukan karena desain systemd.
Yang sedang berkata, solusi ini, ketika dikombinasikan dengan auto-restart, berhenti bekerja untuk kami ketika kami digunakan untuk CentOS8. Ini karena systemd v239 yang dikirim dalam C8 memperkenalkan perubahan ke
OnFailure=
semantik ketika dikombinasikan dengan konfigurasi non-defaultRestart=
(Restart=on-failure
dalam kasus kami).OnFailure=
Perilaku baru hanya memicu layanan sekali pakai jika restart gagal sepenuhnya, tidak hanya setelah crash. Perilaku yang lebih baru ini akan dengan senang hati memulai kembali layanan, tetapi kami tidak akan mendapatkan email karenaOnFailure=
tidak lagi dipanggil.Perhatikan harapan utama kami: kami ingin systemd memulai kembali proses DAN mengirim pemberitahuan email. Pembaruan v239 membuat solusi kami sebelumnya yang dikutip oleh gf_ tidak berfungsi lagi. Untungnya kami berhasil.
Solusi kami adalah gunakan
ExecStopPost
untuk menjalankan skrip notifikasi email. Ini berfungsi dengan baik, tetapi sekarang masalah baru muncul: pemberitahuan email dikirim ketika layanan clickhouse dimulai secara normal, seperti pada startup server. Meskipun bukan masalah besar, idealnya kami ingin mendapatkan notifikasi email hanya pada crash. Kami dapat mencapai ini dengan menambahkan kode berikut ke skrip email kami:# Don't do anything if the service intentionally stopped successfully. if [ $SERVICE_RESULT == "success" ]; then exit fi
...
$SERVICE_RESULT
adalah variabel lingkungan yang dipasok oleh systemd ke proses targetExecStopPost
. Dengan memeriksasuccess
hasilnya, kami menganggap bahwa permohonan ini berasal dari startup normal, atau shutdown, dan tidak melakukan apa pun. Pada nilai lain, sepertisignal
, skrip akan melanjutkan pengiriman email. Nilai-nilai yang mungkin dari variabel ini dinyatakan dalam dokumentasi .Terima kasih kepada gf_ untuk solusi awal. Saya harap orang-orang menemukan pembaruan saya bermanfaat untuk CentOS8. Beberapa tautan yang membantu saya:
sumber
Anda dapat mencoba menggunakan opsi layanan systemd ExecStartPost.
Deskripsi tersedia di sini:
https://www.freedesktop.org/software/systemd/man/systemd.service.html
Ada lebih banyak deklarasi opsi ini di file definisi layanan. Itu dipicu satu per satu.
Anda juga akan memiliki beberapa contoh di sistem Anda.
sumber
Anda dapat membuat skrip shell untuk memeriksa status layanan dan mengirim email saat server melakukan boot up. Tautan ini mungkin membantu Anda
/ubuntu/814/how-to-run-scripts-on-start-up
sumber