GNU/Linux >> Belajar Linux >  >> Linux

Skrip Linux untuk memeriksa apakah proses sedang berjalan dan menindaklanjuti hasilnya

Saya telah mengadopsi skrip Anda untuk situasi saya, Jotne.

#! /bin/bash

logfile="/var/oscamlog/oscam1check.log"

case "$(pidof oscam1 | wc -w)" in

0)  echo "oscam1 not running, restarting oscam1:     $(date)" >> $logfile
    /usr/local/bin/oscam1 -b -c /usr/local/etc/oscam1 -t /usr/local/tmp.oscam1 &
    ;;
2)  echo "oscam1 running, all OK:     $(date)" >> $logfile
    ;;
*)  echo "multiple instances of oscam1 running. Stopping & restarting oscam1:     $(date)" >> $logfile
    kill $(pidof oscam1 | awk '{print $1}')
    ;;
esac

Saat saya menguji, saya mengalami masalah..Saya memulai 3 proses tambahan oscam1 dengan baris ini:/usr/local/bin/oscam1 -b -c /usr/local/etc/oscam1 -t /usr/local/tmp.oscam1 yang meninggalkan saya dengan 8 proses untuk oscam1. masalahnya adalah ini..Ketika saya menjalankan skrip, itu hanya membunuh 2 proses sekaligus, jadi saya harus menjalankannya 3 kali untuk menurunkannya menjadi 2 proses..

Selain killall -9 oscam1 diikuti oleh /usr/local/bin/oscam1 -b -c /usr/local/etc/oscam1 -t /usr/local/tmp.oscam1 , di *) apakah ada cara yang lebih baik untuk membunuh semua selain dari proses aslinya? Jadi tidak akan ada downtime?


Program untuk memantau jika proses pada sistem sedang berjalan.

Script disimpan di crontab dan berjalan sekali setiap menit.

Ini berfungsi jika proses tidak berjalan atau proses berjalan beberapa kali:

#! /bin/bash

case "$(pidof amadeus.x86 | wc -w)" in

0)  echo "Restarting Amadeus:     $(date)" >> /var/log/amadeus.txt
    /etc/amadeus/amadeus.x86 &
    ;;
1)  # all ok
    ;;
*)  echo "Removed double Amadeus: $(date)" >> /var/log/amadeus.txt
    kill $(pidof amadeus.x86 | awk '{print $1}')
    ;;
esac

0 Jika proses tidak ditemukan, mulai ulang.
1 Jika proses ditemukan, semua ok.
* Jika proses berjalan 2 atau lebih, matikan yang terakhir.

Versi yang lebih sederhana. Ini hanya menguji apakah proses sedang berjalan, dan jika tidak restart.

Itu hanya menguji bendera keluar $? dari pidof program. Ini akan menjadi 0 proses sedang berjalan dan 1 jika tidak.

#!/bin/bash
pidof  amadeus.x86 >/dev/null
if [[ $? -ne 0 ]] ; then
        echo "Restarting Amadeus:     $(date)" >> /var/log/amadeus.txt
        /etc/amadeus/amadeus.x86 &
fi

Dan terakhir, satu kalimat

pidof amadeus.x86 >/dev/null ; [[ $? -ne 0 ]] && echo "Restarting Amadeus:     $(date)" >> /var/log/amadeus.txt && /etc/amadeus/amadeus.x86 &

Ini kemudian dapat digunakan di crontab untuk menjalankan setiap menit seperti ini:

* * * * * pidof amadeus.x86 >/dev/null ; [[ $? -ne 0 ]] && echo "Restarting Amadeus:     $(date)" >> /var/log/amadeus.txt && /etc/amadeus/amadeus.x86 &

cccam oscam


Saya mengadopsi solusi @Jotne dan bekerja dengan sempurna! Misalnya untuk server mongodb di NAS saya

#! /bin/bash

case "$(pidof mongod | wc -w)" in

0)  echo "Restarting mongod:"
    mongod --config mongodb.conf
    ;;
1)  echo "mongod already running"
    ;;
esac

Linux
  1. Hasil Ls * , Ls ** Dan Ls ***?

  2. Periksa layanan yang berjalan di Linux

  3. Perintah Linux untuk memeriksa apakah skrip shell sedang berjalan atau tidak

  1. Cara memeriksa apakah grup ada dan menambahkan jika tidak ada di Linux Shell Script

  2. Bagaimana cara mendapatkan pid dari suatu proses dan mengaktifkan kill -9 di skrip Shell?

  3. Bisakah proses init menjadi skrip shell di Linux?

  1. Cara memeriksa Versi OS dan Linux

  2. Linux – Bagaimana Mendapatkan Waktu Jam Dinding Dari Proses Yang Berjalan?

  3. Bagaimana cara memeriksa apakah suatu proses masih berjalan menggunakan Python di Linux?