Вот если кому интересно простой пример мониторинга чтоли
#include <stdio.h>
#include <unistd.h>
char cpuUsage();
int memTotal();
int memFree();
int main() {
while(1) {
printf("CPU: %d%%\nMEM: %d/%d\n", cpuUsage(), memTotal(), memFree());
fflush(stdout);
sleep(1);
}
return 0;
}
char cpuUsage() {
char load = 0;
unsigned long total, c, n, s, i = 0;
unsigned long c1, n1, s1, i1 = 0;
FILE *f = fopen("/proc/stat", "r");
if (fscanf(f, "cpu %lu %lu %lu %lu", &c, &n, &s, &i) < 4) {
fclose(f);
return -1;
}
fclose(f);
sleep(1);
f = fopen("/proc/stat", "r");
if (fscanf(f, "cpu %lu %lu %lu %lu", &c1, &n1, &s1, &i1) < 4) {
fclose(f);
return -1;
}
fclose(f);
c = c1-c;
n = n1 -n;
s = s1 -s;
i = i1 - i;
total = c + n + s + i;
load = 100.0 * ((c + n + s)/(double)total);
return load;
}
int memTotal() {
unsigned long memtotal;
FILE *fp;
fp = fopen("/proc/meminfo", "r");
if (!fp)
return -1;
if(fscanf(fp, "MemTotal:%lu kB\n", &memtotal) != 1) {
fclose(fp);
return -1;
}
fclose(fp);
return memtotal / 1024;
}
int memFree() {
int memFree;
int ignore;
FILE *fp;
fp = fopen("/proc/meminfo", "r");
if (!fp)
return -1;
if(fscanf(fp, "MemTotal:%llu kB\n", &ignore) != 1) {
fclose(fp);
return -1;
}
if(fscanf(fp, "MemFree:%lu kB\n", &memFree) != 1) {
fclose(fp);
return -1;
}
fclose(fp);
return memFree / 1024;
}Скомпилить можно так:
gcc file.c
Запустить:
chmod +x a.out
./a.out
Можно прописать условие на отправку письма на емаил, если cpuUsage()> 95% or mrmFree() <(memTotal /8)
Отправляем письмо "[server]highload, help me pls"