Saya memerlukan perintah untuk mematikan proses yang telah berjalan setidaknya 5 menit untuk proses yang diberikan.
Saya harus menjalankan perintah itu setiap lima menit atau lebih.
Terima kasih banyak !
(sistem adalah Centos5)
kill -9 $(ps -eo comm,pid,etimes | awk '/^procname/ {if ($3 > 300) { print $2}}')
di mana "procname" adalah nama proses dan 300 menjalankan ambang waktu
-9
menjadi sedikit lebih ramah dengan proses saya dan menambahkangrep -v defunct |
sebelumnyaawk
sebagai otherwhise Anda mungkin melihatprocname <defunct>
dalam output Anda yang akan membuat perintah awk tidak mengembalikan PID yang valid. Dan ini akan melanggar perintah membunuh.$(ps -eo comm,pid,etimes | awk '/^procname/ {if ($3 > 300) { print "kill "$2}}')
sedikit lebih halus tetapi jawabannya bagusMungkin menjalankan perintah berjalan lama seperti ini di crontab?
sumber
Versi skrip kill saya, mengambil manfaat dari kedua jawaban sebelumnya:
Ini memfilter proses oleh UID, NAME dan jika waktu eksekusi melebihi batas - bunuh proses dan kirim laporan ke email. Jika Anda tidak memerlukan email itu - Anda bisa mengomentari baris terakhir.
sumber
Saya menemukan solusinya di halaman ini: http://www.directadmin.com/forum/showthread.php?t=26179
Buat file kosong dan sebut itu killlongproc.sh
Salin ini:
Hentikan ini di cronjob Anda
sumber
kill -9
karena tidak memberikan proses kesempatan untuk melakukan pembersihan dengan anggun sebelum keluar.Ada skrip di sini yang dapat Anda modifikasi untuk melakukan apa yang Anda inginkan.
EDIT menambahkan skrip di bawah ini
sumber
etimes
darips
menunjukkan secara langsung detik-detik berlalu sejak proses awal (tidak perlu menghitung dari waktu mulai).ps
yang tidak mendukungetimes
(hanyaetime
) maka ini merupakan alternatif yang bagus. Saya hanya menggunakannya ketika jawaban teratas memberi saya kesalahan darips
Saya harus menyelesaikan tugas yang sama, dan tidak perlu skrip. Untuk mengakhiri (sinyal SIGTERM) proses yang dapat dieksekusi "THECOMMAND":
Pembatasan untuk pengguna saat
-u $USER
ini diperlukan hanya untuk menghindari pesan kesalahan yang tidak perlu jika pengguna lain juga menjalankan "THECOMMAND". Di crontab pengguna Anda sendiri, Anda akan memasukkan yang berikut ini:Dalam crontab sistem (pengguna 'root') Anda akan menambahkan yang berikut:
Jika Anda ingin membunuh (SIGKILL) proses alih-alih menghentikan (SIGTERM) mereka, secara eksplisit mengirim sinyal SIGKILL dengan menambahkan
--signal SIGKILL
ke parameter. Contoh untuk sistem crontab:sumber
Untuk httpd
ps eaxo pid, waktu, komunikasi | tail -n + 2 | grep 'httpd' | awk 'substr ($ 0,9,1)> 0' | awk '{print $ 1}'
sumber