Ping, ana bilgisayarın ağa bağlı olup olmadığı hakkında hızlı bir yanıt almak için mükemmeldir, ancak genellikle ana bilgisayarın canlı olup olmadığını veya hala beklendiği gibi çalışıp çalışmadığını size söylemez. Bunun nedeni, ping yanıtlarının genellikle çekirdek tarafından ele alınmasıdır, bu nedenle sistemdeki her uygulama çökse bile (örneğin bir disk arızası veya belleğin tükenmesi nedeniyle), genellikle ping yanıtları alırsınız ve makinenin durum tam tersi olduğunda normal çalışır.
Hizmetleri kontrol etme
Genellikle bir ana bilgisayarın hala çevrimiçi olup olmadığını gerçekten önemsemezsiniz, gerçekten önemsediğiniz şey, makinenin hala bir görev gerçekleştirip gerçekleştirmediğidir. Dolayısıyla, görevi doğrudan kontrol edebiliyorsanız, ana bilgisayarın hem çalışır durumda olduğunu hem de görevin hala çalışmakta olduğunu bilirsiniz.
Örneğin, bir web sunucusu çalıştıran uzak bir ana bilgisayar için aşağıdakine benzer bir şey yapabilirsiniz:
# Add the -f option to curl if server errors like HTTP 404 should fail too
if curl -I "http://$TARGET"; then
echo "$TARGET alive and web site is up"
else
echo "$TARGET offline or web server problem"
fi
SSH çalıştırıyorsa ve şifresiz oturum açma için ayarlanmış anahtarlarınız varsa, örneğin birkaç seçeneğiniz daha vardır:
if ssh "$TARGET" true; then
echo "$TARGET alive and accessible via SSH"
else
echo "$TARGET offline or not accepting SSH logins"
fi
Bu, SSH'yi ana bilgisayara girerek ve true
komutu çalıştırarak ve ardından bağlantıyı kapatarak çalışır . ssh
O komut başarılı bir şekilde çalıştırılabilir eğer komut sadece başarıyı dönecektir.
SSH ile uzaktan testler
mysqld
Makinede çalıştığından emin olmak gibi belirli işlemleri kontrol etmek için bunu genişletebilirsiniz :
if ssh "$TARGET" bash -c 'ps aux | grep -q mysqld'; then
echo "$TARGET alive and running MySQL"
else
echo "$TARGET offline or MySQL crashed"
fi
Elbette bu durumda monit
, hizmetin çalışmaya devam etmesini sağlamak için hedefte olduğu gibi bir şey çalıştırmaktan daha iyi olursunuz , ancak B makinesi buna hazır olduğu sürece yalnızca A makinesinde bazı görevleri gerçekleştirmek istediğiniz komut dosyalarında kullanışlıdır. .
Bu, hedef makinenin bir gerçekleştirmeden önce belirli bir dosya sistemine sahip olup olmadığını kontrol etmek gibi bir şey olabilir rsync
, böylece ikincil bir dosya sistemi herhangi bir nedenden dolayı bağlanmadıysa yanlışlıkla ana diskini doldurmazsınız. Örneğin bu, /mnt/raid
devam etmeden önce hedef makineye monte edildiğinden emin olur .
if ssh "$TARGET" bash -c 'mount | grep -q /mnt/raid'; then
echo "$TARGET alive and filesystem ready to receive data"
else
echo "$TARGET offline or filesystem not mounted"
fi
İstemcisi olmayan hizmetler
Bazen servise bağlanmak için kolay bir yol yoktur ve sadece gelen TCP bağlantılarını kabul edip etmediğini görmek istersiniz, ancak telnet
söz konusu porttaki hedefe gittiğinizde orada oturur ve bağlantıyı kesmez, yani bunu yapmak anlamına gelir. bir komut dosyasında asılı kalmasına neden olur.
Çok temiz olmasa da, timeout
ve netcat
programları yardımıyla bunu hala yapabilirsiniz . Örneğin bu, makinenin TCP bağlantı noktası 445'te SMB / CIFS bağlantılarını kabul edip etmediğini kontrol eder, böylece oturum açmak için bir parolanız olmasa da CIFS istemci araçları çalışmıyorsa Windows dosya paylaşımını çalıştırıp çalıştırmadığını görebilirsiniz. ' t kurulu:
# Wait 1 second to connect (-w 1) and if the total time (DNS lookups + connect
# time) reaches 5 seconds, assume the connection was successful and the remote
# host is waiting for us to send data. Connecting on TCP port 445.
if echo 'x' | timeout --preserve-status 5 nc -w 1 "$TARGET" 445; then
echo "$TARGET alive and CIFS service available"
else
echo "$TARGET offline or CIFS unavailable"
fi