Genel olarak, basit bir yaklaşım denemek için kötü bir fikir ps
ve grep
belirli bir süreç çalışıp çalışmadığını belirlemek için denemek için.
Bunun pgrep
için kullanmak çok daha iyi olurdu :
if pgrep "varnish" >/dev/null; then
echo "Varnish in running"
else
echo "Varnish is not running"
fi
İçin kılavuza bakınız pgrep
. Bazı sistemlerde (muhtemelen Linux'ta değil), yönlendirme gereksiniminden kurtulan -q
aynı bayrağa karşılık gelen bir bayrak alırsınız . Ayrıca , işlemi yalnızca işlem adından ziyade tam komut satırında gerçekleştiren bir bayrak vardır. Ayrıca eşleşme, belirli bir kullanıcıya ait işlemlerle sınırlandırılabilir .grep
/dev/null
-f
-u
Kurulum pgrep
ayrıca pkill
, adlarına göre süreçleri işaretlemenize izin veren erişim sağlar.
Ayrıca, bu bir hizmet arka plan programı ise ve Unix sisteminizde bunu bilgi için sorgulamanın bir yolu varsa (örneğin, çalışıp çalışmadığını), o zaman bu kontrol etmenin uygun yoludur.
Linux'ta, sahip systemctl
( systemctl is-active --quiet varnish
Çalışıyorsa 3 aksi takdirde 0 döndürür), sahip OpenBSD'deki rcctl
vs.
Şimdi senaryonuza:
Senaryonuzda çıktıyı ayrıştırırsınız ps ax
. Bu çıktı, check_varnish_pro.sh
açıkça dizeyi içeren betiğin adını içerecektir varnish
. Bu size yanlış bir pozitif verir. Test sırasında -q
bayrağı olmadan çalıştırsaydınız bunu fark ederdiniz grep
.
#!/bin/bash
ps ax | grep '[v]arnish'
Koşu:
$ ./check_varnish_pro.sh
31004 p1 SN+ 0:00.04 /bin/bash ./check_varnish_pro.sh
Başka bir sorun, desende kullanarak grep
işlemin grep
kendi başına algılanmasını "gizlemeye" çalışmanızdır [v]
. Komut dosyasını veya komut satırını, içinde bir dosya veya dizin bulunan bir dizinde çalıştırırsanız bu yaklaşım başarısız olur varnish
(bu durumda yine yanlış pozitif alırsınız). Bunun nedeni, desenin tırnaksız olması ve kabuğun onunla dosya adı globbing yapmasıdır.
Görmek:
bash-4.4$ set -x
bash-4.4$ ps ax | grep [v]arnish
+ ps ax
+ grep '[v]arnish'
bash-4.4$ touch varnish
+ touch varnish
bash-4.4$ ps ax | grep [v]arnish
+ ps ax
+ grep varnish
91829 p2 SN+p 0:00.02 grep varnish
Dosyanın varlığı varnish
kabuğun [v]arnish
dosya adıyla değiştirilmesine neden olur varnish
ve işlem tablosundaki ( grep
işlem) desende bir isabet alırsınız .