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