Node wird ständig ausgeschaltet

  • Hallo, in app.js benutze ich ein Array, das speichere ich in einer globalen Variable und nach 5 min ist da nichts bzw default Wert. Wird app.js jeder 5 min neugestartet? Bei mir auf dem Rechner bleiben die wochenlang initialisiert. Wird app.js beim Nichtnutzen gestoppt und erst bei nächsten Anfrage neugeladen? Gib es da zumindest ein Destructor um die Daten zu speichern?

    ps Sehr sparsam klappt: ich beantworte Anfragen mit 10 Bytes dafür aber muss jetzt 10. KBytes jedesmal lesen und speichern...

  • Danke für die Nachtschicht und Antworten


    Hier ist....


    const http = require('http')
    const fs = require('fs')
    var pda = require('./pda.json')
    var h = ['_','_','_']

    var server = http.createServer(function(request, response) {

    response.setHeader('Content-Type', 'text/html')


    usw


    oder was wird gemeint? Ich drücke den Knopf in Plesk App neustarten und somit ist gestartet?

  • Ja im webhosting werden die NodeJS Scripte nach einiger Zeit gestoppt. Vermutlich um Resourcen zu Sparen.

    Ich glaube das passiert nach ca. 5 Minuten ohne Aufruf.


    Du kannst in NodeJS den process.on('exit') hook verwenden.

    https://nodejs.org/api/process.html#process_event_exit


    Den Inhalt deines Arrays musst du aber trotzdem, bevor dein Script beendet wird, auf der Festplattte/ Datenbank speichern.
    Wenn dein Script permanet laufen soll, musst du einen eigenen Server verwenden.

  • const http = require('http')

    const fs = require('fs')

    var pda = require('./pda.json')

    var h = ['_','_','_']

    process.on('exit', ()=>{

    fs.writeFile('./pda.json',JSON.stringify(pda),err => {})

    })

    var server = http.createServer(function(request, response) {

    response.setHeader('Content-Type', 'text/html')


    Offensichtlich zu spät, die pda.json wird leer, wahrscheinlich pda[] zu diesem Zeitpunkt nicht mehr existiert...

  • Falls es jemanden interessiert, ich hab probiert


    process.on('exit', ()=>{

    fs.writeFile('./pda1.json','etwas',err => {})

    })

    Datei wird erstellt 'etwas' aber nicht erscheint writeFile wird unterbrochen...


    process.on('beforeExit', ()=>{

    fs.writeFile('./pda1.json','etwas',err => {})

    })

    Wird überhaupt nicht aufgerufen...


    Macht "Spaß" alles das zu untersuchen, nach dem man vielleicht was sehr günstiges aber trotzdem gekauft hat...

  • Laut Dokuementation müssen die funktionsaufrufe im callback synchron sein, fs.writeFile ist meines wisssens Asynchron.

    Asynchrone funktionen werden im exit callback nicht mehr ausgeführt, da dass programm sich ja dann direkt benendet.

    Auch wir der Funktion der exit-code mitgeben vlt. möchtest du den auch noch aufnehmen.


    Probiere mal etwas wie:

    Code
    process.on('exit', (code) => {
        fs.writeFileSync( './pda.json',JSON.stringify(pda) )
    });

    Also den exit-code als parameter mit ins callback und fs.writeFileSync()

  • Nö.... Funktioniert doch nicht...

    Wenn man den App selbst stoppt dann klappt es, die Funktion wird angerufen und wird sogar gewartet bis sie was schreibt...

    Soll es doch automatisch durch Netcup gestoppt werden, kommt keinen Aufruf :(

    Auf jedem Fall, sich drauf verlassen - kann man vergessen.


    (Was ich noch entdeckt habe, des Stoppen komm am Tag in 5 min, in der Nacht passiert deutlich seltener... zB zwischen 3 und 8 niemals)