Ansage war:
Dazu reicht z.B. ein laufendes MySQL und ein als Dienst etabliertes Schell-Skript, welches einmal die Verbindung zur Datenbank aufbaut, den Logstring mit read str; entgegennimmt und nach Entschärfung den Insert macht.
Ich hab mir gedacht, ich mach das mal in PHP...
<?php
/* database: test, table: phplog
MariaDB [test]> describe test.phplog\G
*************************** 1. row ***************************
Field: id
Type: int(11)
Null: NO
Key: PRI
Default: NULL
Extra: auto_increment
*************************** 2. row ***************************
Field: timestamp
Type: timestamp
Null: YES
Key: MUL
Default: CURRENT_TIMESTAMP
Extra:
*************************** 3. row ***************************
Field: entry
Type: varchar(1000)
Null: YES
Key:
Default: NULL
Extra:
*/
$FH = fopen( 'php://stdin', 'r' );
$mysqli = mysqli_connect("localhost", "test", "hallo", "test");
$sql ='INSERT INTO `phplog` (`entry`) values (?)';
$stmt = $mysqli->prepare( $sql );
$entry = 'Connected from '. __FILE__;
$stmt -> bind_param( "s", $entry );
$stmt -> execute();
while ( $entry = fgets( $FH ) ) {
$entry = substr( trim( $entry ), 0, 1000 ) ;
$stmt -> bind_param( 's', $entry );
$stmt -> execute();
}
Test mit /var/log/syslog (Derzeit 303 Zeilen):
wc -l /var/log/syslog; time cat /var/log/syslog | php test.php
303 /var/log/syslog
real 0m0,276s
user 0m0,029s
sys 0m0,015s
Wie weiter? Man kann das Skript wie folgt umbauen:
#$FH = fopen( 'php://stdin', 'r' );
$FH = fopen( '/tmp/phplogger', 'r+' );
dazu den angebenen FiFO bauen:
mkfifo /tmp/phplogger
Das Zeug starten:
php /tmp/test.php
und dann so loggen:
echo "Eintrag" > /tmp/phplogger
Ist der Eintrag drin?
MariaDB [test]> select * from phplog order by id desc limit 1;
+------+---------------------+---------+
| id | timestamp | entry |
+------+---------------------+---------+
| 3096 | 2020-03-11 14:35:54 | Eintrag |
+------+---------------------+---------+