Skrip Shell melaksanakan sistem Linux dan pemantauan sumber proses_Pengetahuan asas

WBOY
Lepaskan: 2016-05-16 16:10:57
asal
2082 orang telah melayarinya

Dalam proses pengendalian dan penyelenggaraan pelayan, selalunya perlu untuk memantau pelbagai sumber pelayan, seperti: Pemantauan beban CPU, pemantauan penggunaan cakera, pemantauan nombor proses, dsb., supaya segera menggera dan memberitahu bila keabnormalan berlaku dalam sistem pentadbir. Artikel ini memperkenalkan beberapa keperluan pemantauan biasa dan penulisan skrip shell di bawah sistem Linux.

Direktori artikel:

1.Linux menggunakan Shell untuk menyemak sama ada proses itu wujud
2.Linux menggunakan Shell untuk mengesan penggunaan CPU proses
3.Linux menggunakan Shell untuk mengesan penggunaan memori proses
4.Linux menggunakan Shell untuk mengesan penggunaan pemegang proses
5.Linux menggunakan Shell untuk menyemak sama ada port TCP atau UDP sedang mendengar
6.Linux menggunakan Shell untuk menyemak bilangan proses berjalan bagi nama proses tertentu
7.Linux menggunakan Shell untuk mengesan beban CPU sistem
8.Linux menggunakan Shell untuk mengesan ruang cakera sistem
9. Ringkasan

Semak sama ada proses itu wujud

Apabila memantau proses, kami secara amnya perlu mendapatkan ID proses ID proses ialah pengecam unik proses tersebut. Walau bagaimanapun, kadangkala mungkin terdapat berbilang proses dengan nama proses yang sama dijalankan di bawah pengguna yang berbeza pada pelayan . Fungsi berikut GetPID Ia memberikan fungsi untuk mendapatkan ID proses bagi nama proses yang ditentukan di bawah pengguna yang ditentukan (pada masa ini hanya mempertimbangkan untuk memulakan proses dengan nama proses ini di bawah pengguna ini. Ia mempunyai dua parameter: nama pengguna dan nama proses). Ia mula-mula menggunakan ps untuk mencari maklumat proses, dan pada masa yang sama Gunakan grep untuk menapis proses yang diperlukan, dan akhirnya menggunakan sed dan awk untuk mencari nilai ID proses yang diperlukan (fungsi ini boleh diubah suai mengikut situasi sebenar , seperti jika maklumat lain perlu ditapis, dsb.).

Senarai 1. Pantau proses

Salin kod Kod adalah seperti berikut:

fungsi GetPID #User #Name
{
PsUser=$1
PsName=$2
pid=`ps -u $PsUser|grep $PsName|grep -v grep|grep -v vi|grep -v dbxn
|grep -v tail|grep -v mula|grep -v stop |sed -n 1p |awk '{print $1}'`
echo $pid
}

Contoh demo:

1) Program sumber (contohnya, cari ID proses di mana pengguna adalah root dan nama proses ialah CFTestApp)

Salin kod Kod adalah seperti berikut:

PID=`GetPID root CFTestApp`

echo $PID

2) Hasil keluaran

Salin kod Kod adalah seperti berikut:

11426
[dyu@xilinuxbldsrv shell]$

3) Analisis keputusan

Seperti yang dapat dilihat daripada output di atas: 11426 ialah ID proses program CFTestApp di bawah pengguna root.

4) Pengenalan arahan

1. ps: Lihat maklumat proses segera dalam sistem. Parameter: -u Menyenaraikan status program kepunyaan pengguna ini, yang juga boleh ditentukan menggunakan nama pengguna. -p menentukan pengecam proses dan menyenaraikan status proses. -o menentukan format output 2. grep: digunakan untuk mencari baris semasa dalam fail yang sepadan dengan rentetan. Parameter: -v pemilihan terbalik, iaitu, memaparkan baris tanpa kandungan 'rentetan carian'. 3. sed: Editor teks bukan interaktif yang mengedit fail atau fail yang dieksport daripada input standard dan hanya boleh memproses satu baris kandungan pada satu masa. Parameter: -n Baca baris input seterusnya dan gunakan arahan seterusnya untuk memproses baris baharu dan bukannya arahan pertama. bendera p mencetak baris yang sepadan 4. awk: bahasa pengaturcaraan yang digunakan untuk pemprosesan teks dan data di bawah linux/unix. Data boleh datang daripada input standard, satu atau lebih fail, atau output arahan lain. Ia menyokong fungsi lanjutan seperti fungsi yang ditentukan pengguna dan ungkapan biasa dinamik, dan merupakan alat pengaturcaraan yang berkuasa di bawah linux/unix. Ia digunakan dari baris arahan, tetapi lebih kerap sebagai skrip. Cara awk memproses teks dan data: ia mengimbas fail baris demi baris, dari baris pertama hingga baris terakhir, mencari baris yang sepadan dengan corak tertentu dan melaksanakan operasi yang anda inginkan pada baris tersebut. Jika tiada tindakan pemprosesan ditentukan, baris yang sepadan dipaparkan pada output standard (skrin). Parameter: -F fs atau –field-separator fs: Tentukan pemisah lipatan fail input, fs ialah rentetan atau ungkapan biasa, seperti -F:.
Kadangkala ada kemungkinan proses tidak dimulakan Fungsi berikut adalah untuk menyemak sama ada ID proses wujud Jika proses tidak berjalan, outputnya ialah:

Salin kod Kod adalah seperti berikut:

Prosesnya tidak wujud
# Semak sama ada proses itu wujud
Jika [ "-$PID" == "-" ]
Kemudian
{
echo "Proses tidak wujud."
}
fi

Kesan proses penggunaan CPU

Apabila menyelenggara perkhidmatan aplikasi, kami sering menghadapi situasi di mana CPU terlalu tinggi, menyebabkan kesesakan perniagaan dan gangguan perniagaan. CPU yang berlebihan mungkin disebabkan oleh situasi yang tidak normal seperti beban perniagaan atau gelung yang tidak berkesudahan CPU proses perniagaan sentiasa dipantau melalui skrip Kakitangan penyelenggaraan boleh dimaklumkan pada masa apabila penggunaan CPU tidak normal, yang memudahkan kakitangan penyelenggaraan menganalisis, mencari dan. elakkan urusan dengan tepat pada masanya. Fungsi berikut mendapatkan penggunaan CPU proses untuk ID proses tertentu. Ia mempunyai parameter untuk ID proses Ia mula-mula menggunakan ps untuk mencari maklumat proses, sambil menapis baris %CPU melalui grep -v, dan akhirnya menggunakan awk untuk mencari bahagian integer peratusan penggunaan CPU (jika terdapat berbilang. CPU dalam sistem, penggunaan CPU boleh melebihi 100%).

Senarai 2. Pemantauan masa nyata CPU proses perniagaan

Salin kod Kod adalah seperti berikut:

fungsi GetCpu
{
CpuValue=`ps -p $1 -o pcpu |grep -v CPU |. awk '{print $1}' | echo $CpuValue
}

Fungsi berikut adalah untuk mendapatkan penggunaan CPU proses ini melalui fungsi GetCpu di atas, dan kemudian menggunakan pernyataan bersyarat untuk menentukan sama ada penggunaan CPU melebihi had Jika ia melebihi 80% (boleh dilaraskan mengikut situasi sebenar), a penggera akan dikeluarkan, jika tidak, maklumat biasa akan dikeluarkan.
Senarai 3. Tentukan sama ada penggunaan CPU melebihi had

Salin kod Kod adalah seperti berikut:
fungsi CheckCpu
{
PID=$1
cpu=`GetCpu $PID`
Jika [ $cpu -gt 80 ]
Kemudian
{
echo “Penggunaan cpu lebih besar daripada 80%”
}
lain
{
echo “Penggunaan cpu adalah perkara biasa”
}
fi
}

Contoh tunjuk cara:

1) Program sumber (dengan mengandaikan bahawa ID proses CFTestApp telah disoal di atas sebagai 11426)


Salin kod Kod adalah seperti berikut:
CheckCpu 11426

2) Hasil keluaran

Salin kod Kod adalah seperti berikut:
Penggunaan cpu ialah 75
Penggunaan cpu adalah biasa
[dyu@xilinuxbldsrv shell]$

3) Analisis keputusan
Seperti yang dapat dilihat daripada output di atas: penggunaan CPU semasa program CFTestApp ialah 75%, iaitu normal dan tidak melebihi had penggera 80%.

Kesan penggunaan memori proses

Apabila menyelenggara perkhidmatan aplikasi, kami sering menghadapi situasi di mana proses ranap disebabkan penggunaan memori yang berlebihan, menyebabkan gangguan perniagaan (contohnya, ruang memori maksimum yang boleh dialamatkan bagi program 32-bit ialah 4G. Jika melebihi, memori aplikasi akan gagal, dan ingatan fizikal juga terhad). Penggunaan memori yang berlebihan mungkin disebabkan oleh kebocoran memori, pengumpulan mesej, dll. Penggunaan memori proses perniagaan sentiasa dipantau melalui skrip Penggera boleh dihantar dalam masa (contohnya, melalui SMS) apabila penggunaan memori tidak normal, supaya kakitangan penyelenggaraan boleh mengendalikannya tepat pada masanya. Fungsi berikut mendapatkan penggunaan memori proses untuk ID proses tertentu. Ia mempunyai parameter untuk ID proses, ia mula-mula menggunakan ps untuk mencari maklumat proses, sambil menapis baris VSZ melalui grep -v, dan kemudian mendapat penggunaan memori dalam megabait dengan membahagikan dengan 1000.

Senarai 4. Pantau penggunaan memori proses perniagaan

Salin kod Kod adalah seperti berikut:

Fungsi GetMem
{
MEMUsage=`ps -o vsz -p $1|grep -v VSZ`
(( MEMUsage /= 1000))
echo $MEMUsage
}

Fungsi berikut adalah untuk mendapatkan penggunaan memori proses ini melalui fungsi GetMem di atas, dan kemudian menggunakan pernyataan bersyarat untuk menentukan sama ada penggunaan memori melebihi had Jika ia melebihi 1.6G (boleh dilaraskan mengikut situasi sebenar), a penggera akan dikeluarkan, jika tidak maklumat biasa akan dikeluarkan.

Penyenaraian 5. Menentukan sama ada penggunaan memori melebihi had

Salin kod Kod adalah seperti berikut:

mem=`GetMem $PID`                                                                                                                                                                                                                                                                                 jika [ $mem -gt 1600 ]
kemudian
{
echo “Penggunaan memori lebih besar daripada 1.6G”
}
lain
{
echo “Penggunaan memori adalah perkara biasa”
}
fi

Contoh demo:

1) Program sumber (dengan mengandaikan bahawa ID proses CFTestApp telah disoal di atas sebagai 11426)


Salin kod Kod adalah seperti berikut:
mem=`GetMem 11426`

echo "Penggunaan memori ialah $mem M"

Jika [ $mem -gt 1600 ]
Kemudian
{
echo "Penggunaan memori lebih besar daripada 1.6G"
}
lain
{
echo "Penggunaan memori adalah perkara biasa"
}
fi

2) Hasil keluaran

Salin kod Kod adalah seperti berikut:
Penggunaan memori ialah 248 M
Penggunaan memori adalah perkara biasa
[dyu@xilinuxbldsrv shell]$

3) Analisis keputusan

Seperti yang dapat dilihat daripada output di atas: penggunaan memori semasa program CFTestApp ialah 248M, iaitu normal dan tidak melebihi had penggera 1.6G.

Kesan penggunaan pemegang proses

Apabila menyelenggara perkhidmatan aplikasi, kami sering menghadapi gangguan perniagaan akibat penggunaan pemegang yang berlebihan. Penggunaan pengendalian proses pada setiap platform adalah terhad Contohnya, pada platform Linux, kita boleh menggunakan perintah ulimit – n (buka fail (-n) 1024) atau melihat kandungan /etc/security/limits.conf ke. dapatkan had pengendalian Proses. Penggunaan pemegang yang berlebihan mungkin disebabkan oleh beban yang berlebihan, kebocoran pemegang, dsb. Penggunaan pemegang proses perniagaan sentiasa dipantau melalui skrip Makluman boleh dihantar dalam masa apabila keabnormalan berlaku (contohnya, melalui SMS), supaya kakitangan penyelenggaraan boleh mengendalikannya tepat pada masanya. Fungsi berikut mendapatkan penggunaan pengendalian proses untuk ID proses yang ditentukan. Ia mempunyai satu parameter untuk ID proses Ia mula-mula menggunakan ls untuk mengeluarkan maklumat pengendalian proses, dan kemudian menggunakan wc -l untuk mengira bilangan pemegang keluaran.

Salin kod Kod adalah seperti berikut:
Fungsi GetDes
{
DES=`ls /proc/$1/fd | echo $DES
}


Fungsi berikut adalah untuk mendapatkan penggunaan pemegang proses ini melalui fungsi GetDes di atas, dan kemudian gunakan pernyataan bersyarat untuk menentukan sama ada penggunaan pemegang melebihi had Jika ia melebihi 900 (boleh dilaraskan mengikut situasi sebenar) , penggera akan dikeluarkan, jika tidak, output akan menjadi maklumat biasa.


des=` GetDes $PID`
jika [ $des -gt 900 ]
kemudian
{
echo “Bilangan des lebih besar daripada 900”
}
lain
{
echo “Bilangan des adalah normal”
}
fi

Contoh demo:

1) Program sumber (dengan mengandaikan bahawa ID proses CFTestApp yang terdapat dalam pertanyaan di atas ialah 11426)

Salin kod Kod adalah seperti berikut:

des=`DapatkanDes 11426`

echo "Bilangan des ialah $des"

Jika [ $des -gt 900 ]
Kemudian
{
echo "Bilangan des lebih besar daripada 900"
}
lain
{
echo "Bilangan des adalah normal"
}
fi

2) Hasil keluaran

Salin kod Kod adalah seperti berikut:

Bilangan des ialah 528
Bilangan des adalah normal
[dyu@xilinuxbldsrv shell]$

3) Analisis keputusan

Seperti yang dapat dilihat daripada output di atas: penggunaan pemegang semasa program CFTestApp ialah 528, iaitu normal, dan tidak melebihi had penggera 900.

4) Pengenalan arahan

wc: Kira bilangan bait, perkataan dan baris dalam fail yang ditentukan, dan paparkan serta keluarkan keputusan statistik. Parameter: -l mengira bilangan baris. -c mengira bait. -w Kira bilangan perkataan.

Semak sama ada port TCP atau UDP sedang mendengar

Pengesanan port sering ditemui dalam pengesanan sumber sistem, terutamanya dalam situasi komunikasi rangkaian, pengesanan status port selalunya sangat penting. Kadangkala proses, CPU, memori, dsb. mungkin dalam keadaan biasa, tetapi port berada dalam keadaan tidak normal dan perniagaan tidak berjalan seperti biasa. Fungsi berikut boleh menentukan sama ada port yang ditentukan sedang mendengar. Ia mempunyai parameter untuk port yang akan dikesan Ia mula-mula menggunakan netstat untuk mengeluarkan maklumat penghunian port, dan kemudian menapis bilangan port TCP yang mendengar melalui grep, awk dan wc Pernyataan kedua mengeluarkan bilangan port UDP . Jika mendengar port TCP dan UDP semuanya 0, kembalikan 0, jika tidak, kembalikan 1.

Senarai 6. Pengesanan port

Salin kod Kod adalah seperti berikut:

fungsi Mendengar
{
TCPListeningnum=`netstat -an | awk '$1 == "tcp" && $NF == "DENGAR" {cetak $0}' | UDPListeningnum=`netstat -an|grep ":$1 " n
|awk '$1 == "udp" && $NF == "0.0.0.0:*" {cetak $0}' | (( Listeningnum = TCPListeningnum UDPListeningnum ))
Jika [ $Listeningnum == 0 ]
Kemudian
{
gema "0"
}
lain
{
gema "1"
}
fi
}


Contoh demo:
1) Program sumber (contohnya, tanya status port 8080 untuk melihat sama ada ia mendengar)


Salin kod Kod adalah seperti berikut: isListen=`Listening 8080`
Jika [ $isListen -eq 1 ]
Kemudian
{
echo "Port sedang mendengar"
}
lain
{
echo "Port tidak mendengar"
}
fi


2) Hasil keluaran

Salin kod Kod adalah seperti berikut: Pelabuhan sedang mendengar
[dyu@xilinuxbldsrv shell]$


3) Analisis keputusan

Seperti yang dapat dilihat daripada output di atas: port 8080 pelayan Linux ini dalam keadaan mendengar.

4) Pengenalan arahan

netstat: Digunakan untuk memaparkan data statistik yang berkaitan dengan protokol IP, TCP, UDP dan ICMP Ia biasanya digunakan untuk menyemak sambungan rangkaian setiap port mesin. Parameter: -a memaparkan semua soket dalam sambungan. -n Gunakan alamat IP secara terus tanpa melalui pelayan nama domain.
Fungsi berikut juga mengesan sama ada port TCP atau UDP tertentu berada dalam keadaan biasa.

Salin kod Kod adalah seperti berikut:

tcp: netstat -an|egrep $1 |awk '$6 == "DENGAR" && $1 == "tcp" {print $0}'
udp: netstat -an|egrep $1 |awk '$1 == "udp" && $5 == "0.0.0.0:*" {print $0}'

Pengenalan arahan

egrep: Cari rentetan yang ditentukan dalam fail. Kesan pelaksanaan egrep adalah seperti grep -E Sintaks dan parameter yang digunakan boleh merujuk kepada perintah grep. Sintaks, ungkapan biasa lanjutan mempunyai spesifikasi ungkapan yang lebih lengkap daripada ungkapan biasa asas.

Lihat bilangan proses berjalan bagi nama proses tertentu

Kadang-kadang kita mungkin perlu mendapatkan bilangan proses yang dimulakan pada pelayan Fungsi berikut adalah untuk mengesan bilangan proses yang sedang berjalan Contohnya, nama proses ialah CFTestApp.

Salin kod Kod adalah seperti berikut:

Runnum=`ps -ef |. wc -v ekor |
Kesan beban CPU sistem

Apabila melakukan penyelenggaraan pelayan, kadangkala kami menghadapi gangguan perniagaan akibat beban CPU (penggunaan) sistem yang berlebihan. Berbilang proses mungkin berjalan pada pelayan Ia adalah perkara biasa untuk melihat CPU satu proses, tetapi beban CPU keseluruhan sistem mungkin tidak normal. Beban CPU sistem sentiasa dipantau melalui skrip, dan penggera boleh dihantar dalam masa apabila keabnormalan berlaku, membolehkan kakitangan penyelenggaraan mengendalikannya tepat pada masanya dan mengelakkan kemalangan. Fungsi berikut boleh mengesan penggunaan CPU sistem Gunakan vmstat untuk mendapatkan nilai terbiar CPU sistem 5 kali, ambil purata, dan kemudian dapatkan nilai penggunaan CPU sebenar dengan mengambil perbezaan daripada 100.

Salin kod Kod adalah seperti berikut:
fungsi GetSysCPU
{
CpuIdle=`vmstat 1 5 |sed -n '3,$p' n
|awk '{x = x $15} TAMAT {print x/5}' |awk -F '{print $1}'
CpuNum=`gema "100-$CpuIdle" | echo $CpuNum
}


Contoh demo:

1) Program sumber

cpu=`GetSysCPU`

echo "CPU sistem ialah $cpu"

jika [ $cpu -gt 90 ]
kemudian
{
echo "Penggunaan cpu sistem lebih besar daripada 90%"
}
lain
{
echo "Penggunaan cpu sistem adalah normal"
}
fi


2) Hasil keluaran


CPU sistem ialah 87
Penggunaan cpu sistem adalah biasa
[dyu@xilinuxbldsrv shell]$

3) Ergebnisanalyse

Wie aus der obigen Ausgabe ersichtlich ist: Die aktuelle CPU-Auslastung des Linux-Serversystems beträgt 87 %, was normal ist und die Alarmgrenze von 90 % nicht überschreitet.

4) Befehlseinführung

vmstat: Die Abkürzung für Virtual Meomory Statistics (Virtual Memory Statistics), mit der der virtuelle Speicher, der Prozess und die CPU-Aktivitäten des Betriebssystems überwacht werden können.
Parameter: -n gibt an, dass die Ausgabe-Header-Informationen während der periodischen Schleifenausgabe nur einmal angezeigt werden.

Überprüfen Sie den Systemspeicherplatz

Die Erkennung des Systemspeicherplatzes ist ein wichtiger Teil der Systemressourcenerkennung. Während der Systemwartung müssen wir häufig die Speicherplatznutzung des Servers überprüfen. Da einige Unternehmen von Zeit zu Zeit Anrufnotizen, Protokolle oder temporäre Dateien schreiben müssen, kann es auch zu Geschäftsunterbrechungen kommen, wenn der Speicherplatz erschöpft ist. Die folgende Funktion kann die Speicherplatznutzung eines Verzeichnisses im aktuellen System ermitteln Eingabeparameter Für den zu erkennenden Verzeichnisnamen verwenden Sie df, um die Informationen zur Speicherplatznutzung des Systems auszugeben, und filtern Sie dann durch grep und awk, um den Prozentsatz der Speicherplatznutzung eines bestimmten Verzeichnisses zu erhalten.

Code kopieren Der Code lautet wie folgt:

Funktion GetDiskSpc
{
Wenn [ $# -ne 1 ]
Dann
Geben Sie 1
zurück fi

Ordner="$1$"
DiskSpace=`df -k |grep $Folder |awk '{print $5}' |awk -F% '{print $1}'
echo $DiskSpace
}

Beispieldemo:

1) Quellprogramm (das Erkennungsverzeichnis ist /boot)


Code kopieren Der Code lautet wie folgt:

Ordner="/boot"

DiskSpace=`GetDiskSpc $Folder`

echo „Der Systemspeicherplatz im $Folder beträgt $DiskSpace%“

if [ $DiskSpace -gt 90 ]
dann
{
echo „Die Nutzung der Systemfestplatte ($Folder) beträgt mehr als 90 %“
}
sonst
{
echo „Die Nutzung der Systemfestplatte ($Folder) ist normal“
}
fi

2) Ergebnisausgabe

Code kopieren Der Code lautet wie folgt:

Der System-/Boot-Festplattenspeicher beträgt 14 %
Die Nutzung der Systemfestplatte (/boot) ist normal
[dyu@xilinuxbldsrv-Shell]$

3) Ergebnisanalyse

Aus der obigen Ausgabe können wir ersehen, dass 14 % des Speicherplatzes im /boot-Verzeichnis auf diesem Linux-Serversystem verwendet wurden, was normal ist und die Alarmgrenze von 90 % der Nutzung nicht überschreitet.

4) Befehlseinführung

df: Überprüfen Sie die Speicherplatznutzung des Dateisystems. Mit diesem Befehl können Sie Informationen erhalten, z. B. wie viel Speicherplatz auf der Festplatte belegt ist und wie viel Speicherplatz derzeit noch übrig ist. Parameter: -k Anzeige in k Bytes.

Zusammenfassung

Auf der Linux-Plattform ist die Shell-Skriptüberwachung eine sehr einfache, bequeme und effektive Methode zur Überwachung von Servern und Prozessen. Sie ist sehr hilfreich für Systementwickler und Prozessbetreuer. Es kann nicht nur die oben genannten Informationen überwachen und Alarme senden, sondern auch Prozessprotokolle und andere Informationen überwachen. Ich hoffe, dass dieser Artikel für alle hilfreich ist.

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!