Forum: PC-Programmierung Raspberry Service Logdatei wegsichern und löschen


von Baeri B. (baeri)


Lesenswert?

Hallo,

ich habe aus den tiefen des Internets eine Anleitung gefunden wie ich 
node automatisch als Service anlegen kann und alle Ereignisse in eine 
Logdatei schreiben kann, zwar ist momentan noch viel Debugging 
enthalten... aber trotzdem fallen am Tag ein paar MB an... da der PI 
24/7 laufen soll habe ich dann nach n paar Monaten das System vermutlich 
"lahm" gelegt weil VOLL :D

hier ist die Anleitung: 
https://www.sweetpi.de/blog/41/node-js-installation-auf-dem-raspberry-pi

der part:
1
#!/bin/sh
2
#
3
# Runs node.js against script, logging to a logfile. We have to do
4
# this because there's no way to call node directly and have start-stop-daemon
5
# redirect stdout to a logfile.
6
#
7
8
LOGFILE=/home/baer/node.log
9
NODE=/usr/local/bin/node
10
WORKING_DIR=/var/sock 
11
JAVASCRIPT=server.js
12
13
#pidfile must be first argument
14
PIDFILE=$1
15
16
#cd into working dir:
17
cd ${WORKING_DIR}
18
# Fork off node into the background and log to a file
19
${NODE} ${JAVASCRIPT} >>${LOGFILE} 2>&1 </dev/null &
20
 
21
# Capture the child process PID
22
CHILD="$!"
23
# write pid file:
24
echo $CHILD > $PIDFILE

müsste zuständig sein um bei mir die Logdatei anzulegen...

kann mir jemand helfen, das script so umzuformen, dass die Logdatei 
jeden Tag "weggesichert" wird (/archiv/log_13012017.log) und 
idealerweise die Logdaten welche älter als eine Woche sind gelöscht?

Vielen Dank

von K. J. (Gast)


Lesenswert?

Warum passt du dir dafür nicht logrotate oder einen ähnlichen dienst an, 
der dürfte ja eh vorhanden sein, der macht genau sowas z.b. jeden tag 
die Logs in nen Archiv packen und nach einer zeit automatisch löschen.

von Baeri B. (baeri)


Lesenswert?

sehr sehr cool...
leider kenn ich das tool nicht und weiß auch nicht wie man es bedient...

evtl. ein kurzer blick:

File: /etc/logrotate.conf
1
/home/baer/node.log {
2
    rotate 7
3
    daily
4
    compress
5
    delaycompress
6
    missingok
7
    create 0660 root root
8
}


kann das so funktionieren?

ziel ist es 7 dateien zu erhalten die täglich weggesichert werden?

Besten Dank

: Bearbeitet durch User
von Baeri B. (baeri)


Lesenswert?

Hm,

hat leider nicht so gut geklappt...
1
...
2
3
rotating pattern: /home/baer/node.log  forced from command line (7 rotations)                                                                                        
4
empty log files are rotated, old logs are removed                                                                                                                    
5
considering log /home/baer/node.log                                                                                                                                  
6
  log needs rotating                                                                                                                                                 
7
rotating log /home/baer/node.log, log->rotateCount is 7                                                                                                              
8
dateext suffix '-20170124'                                                                                                                                           
9
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'                                                                                                             
10
renaming /home/baer/node.log.7 to /home/baer/node.log.8 (rotatecount 7, logstart 1, i 7),                                                                            
11
renaming /home/baer/node.log.6 to /home/baer/node.log.7 (rotatecount 7, logstart 1, i 6),                                                                            
12
renaming /home/baer/node.log.5 to /home/baer/node.log.6 (rotatecount 7, logstart 1, i 5),                                                                            
13
renaming /home/baer/node.log.4 to /home/baer/node.log.5 (rotatecount 7, logstart 1, i 4),                                                                            
14
renaming /home/baer/node.log.3 to /home/baer/node.log.4 (rotatecount 7, logstart 1, i 3),                                                                            
15
renaming /home/baer/node.log.2 to /home/baer/node.log.3 (rotatecount 7, logstart 1, i 2),                                                                            
16
renaming /home/baer/node.log.1 to /home/baer/node.log.2 (rotatecount 7, logstart 1, i 1),                                                                            
17
renaming /home/baer/node.log.0 to /home/baer/node.log.1 (rotatecount 7, logstart 1, i 0),                                                                            
18
renaming /home/baer/node.log to /home/baer/node.log.1                                                                                                                
19
creating new /home/baer/node.log mode = 0644 uid = 0 gid = 0                                                                                                         
20
removing old log /home/baer/node.log.8                                                                                                                               
21
error: error opening /home/baer/node.log.8: No such file or directory

ein ls -l sieht so aus:
1
-rw-r--r-- 1 root root  1056 Jan 24 12:35 node.log                                                                                                                   
2
-rw-r--r-- 1 root root  7480 Jan 18 17:50 node.log20170117                                                                                                           
3
-rw-r--r-- 1 root root 16797 Jan 21 09:48 node.log20170121                                                                                                           
4
-rw-r--r-- 1 root root 16841 Jan 22 18:43 node.log20170122                                                                                                           
5
-rw-r--r-- 1 root root 12165 Jan 24 12:22 node.log20170124

die "node.log" files mit einem Datum hinten dran hab ich manuell 
erstellt, soll aber künftig natürlich nicht so sein...

> leider werden meine logs nicht kopiert, verschoben oder umbenannt...

hat jemand eine Idee für mich?

von Stephan G. (Firma: privat) (morob)


Lesenswert?

node reload

        postrotate
                /etc/init.d/node reload > /dev/null
        endscript

in der art

von Epoxyd H. (fr4)


Lesenswert?

Baeri B. schrieb:

> die "node.log" files mit einem Datum hinten dran hab ich manuell
> erstellt, soll aber künftig natürlich nicht so sein...
>
>> leider werden meine logs nicht kopiert, verschoben oder umbenannt...
>
> hat jemand eine Idee für mich?

Ja das kanns du z.B. so machen:

var dt = new Date(Date( ));
var newmsg = {
      'filename':     "/var/ramdisk/Logfile_" + 
dt.getFullYear().toString() + (dt.getMonth()+1).toString() + 
dt.getDate().toString() + ".log"
}

return newmsg

Diese msg übergibst du an das file-objekt, dann wird für jeden Tag ein 
File mit Datum erzeugt. Den Pfad muss du natürlich noch anpassen.

von Stephan G. (Firma: privat) (morob)


Lesenswert?

wenn du den beitrag bis zum ende machst mit start stop script, dann kann 
man den node reloaden und schon gibt es wieder ein log

von Baeri B. (baeri)


Lesenswert?

@morob: naja, klar das hab ich, aber das ist ja nur dafür gedacht um 
node neu zu starten oder zu beenden...
=> aber node soll natürlich "ununterbrochen" laufen...

meine Idee war es auch hier die Logdatei einfach mit Datum zu versehen 
und jeden tag einfach "neuzustarten" ... aber 1. muss ich mich dann noch 
um das löschen kümmern und 2. wissen wie man n datum mit in den namen 
verbaut...

> da ist die Lösung mit Logrotate irgendwie schöner (so finde ich spontan).

Leider bin ich mit der Linux und sh basis noch ein rechter Anfänger... 
ich habe nun schon einiges in C/C++ gelernt aber irgendwie ist mir das 
zu Umständlich hierfür ein C zu schreiben welches dann über einen 
Cronjob läuft
=> vor allem wenn doch Logrotate schon da ist...

Logrotate funktioniert auch... die Systemlogs werden sauber 
weggesichert...

von Stephan G. (Firma: privat) (morob)


Lesenswert?

diese postrotate ist das was gemacht werden soll, wenn die logfiles weg 
gesichert wurden

wenn node kein reload macht, musst du stoppen starten, was im normalfall 
innerhalb von 1 bis 3 sekunden geht.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.