Ich habe jetzt ein Überwachungsprogramm gebaut, das den Logger automatisch startet wenn keine Daten aufgezeichnet werden:
- Code: Alles auswählen
/*
*deltawatchdog - überwacht den Logger deltalog
Wenn keine Daten aufgezeichnet werden, wird der Logger neu gestartet.
Den deltawatchdog von der /etc/rc.local starten lassen, dann wird der Logger über den watchdog gestaret. (Wird bei jedem Neustart ausgeführt).
Der Logger läuft im Hintergrund !!!
*
* To compile this file:
gcc -o [daemonname] thisfile.c
cd /home/delta1
gcc deltawatchdog.c -I../../include/ -I../../smalib -I../../libs -o deltawatchdog
./deltawatchdog
Compile with MYSQL:
* * gcc deltawatchdog.c -I../../include/ -I../../smalib -I../../libs $(mysql_config --cflags) $(mysql_config --libs) -o deltawatchdog
* Substitute gcc with cc on some platforms.
Copyright by Erwin Ruhl
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <syslog.h>
#include <string.h>
#include <assert.h>
#include <signal.h>
#include <time.h>
#define LOG_FILE "/var/log/deltawatchcheck.log"
//#define DELTALOG "/home/delta1/deltalog /home/delta1/sollog.conf &"
#define DELTALOG "/usr/bin/deltalog /usr/bin/deltalog.conf &"
#define KILLALL "killall deltalog"
/* Write Message into Log-File */
int WriteLog(char *str)
{
// int remove( const char *fname );
if( remove( LOG_FILE ) != 0 )
perror( "Error deleting file" );
else
puts( "File successfully deleted -- schreibe reset" );
FILE * fp=fopen(LOG_FILE,"a");
fprintf(fp, "reset");
fclose(fp);
}
int WriteLogok(char *str)
{
// int remove( const char *fname );
if( remove( LOG_FILE ) != 0 )
perror( "Error deleting file" );
else
puts( "File successfully deleted -- schreibe logok" );
FILE * fp=fopen(LOG_FILE,"a");
fprintf(fp, "logok");
fclose(fp);
}
int main(void)
{
char string[5];
char logmsg[35];
WriteLog(logmsg); // schreibe reset
while (1) {
// lese File
FILE * file = fopen( LOG_FILE, "r" );
if( file )
{
fscanf( file, "%s", &string[0] ); // Adresse des ersten Buchstabens
printf( "String gelesen: %s\n", string );
}
if(strcmp(string, "reset") == 0) {
printf("str1 ist gleich str2!\n");
printf( "String geprüft: %s\n", string );
system (KILLALL);
system (DELTALOG); //starte deltalog neu
printf( "deltalog neu gestartet\n" );
}
else WriteLog(logmsg); // schreibe reset
printf("Warte 60 Sekunden\n");
sleep(60);
}
return ;
}
Im Logger muss dann noch eine Funktion eingebaut werden, die ein logok in das Überwachungsfile schreibt, wenn Daten gespeichert wurden. (WriteLogok).
Ich bin momentan dabei einen Logger für SMA- Wechselrichter zu bauen.
Er arbeitet auch mit einem Watchdog.
Ich habe ein fertiges System über und würde es für 150,- Euro abgeben.