2016-12-07 3 views
2

Ich habe einen einfachen "Bot" zum Parsen eines RSS-Feeds in einige Trellokarten erstellt.PM2 Start erstellt seltsame Dateien

Ich verwende PM2 zum Starten und die bot.js Aufrechterhaltung

Aus irgendeinem seltsamen Grund der cliframework einige seltsame Dateien erstellt.

einfach die Situation so klar wie möglich zu machen:

pm2 list 

kehrt

┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────┬───────────┬──────────┐ 
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem  │ watching │ 
├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────┼───────────┼──────────┤ 
│ bot  │ 0 │ fork │ 25084 │ online │ 0  │ 3m  │ 0% │ 67.7 MB │ disabled │ 
└──────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────┴───────────┴──────────┘ 

manchmal, wenn ich die

ls 

der Befehl

kehrt bin mit
bot.js node_modules 

und irgendwann gibt es mit 1+ zusätzlichen leeren Dateien wie diese

b0d3e000-bca5-11e6-b57b-fff3b35ba082 b0d3e001-bca5-11e6-b57b-fff3b35ba082 
bot.js node_modules 

der Dateien werden einige secons danach immer gelöscht und mit verschiedenen Namen danach

hier einige Sekunden erstellt zu werden, ist das Hauptproblem:

Dieser Bot lief für 3 Wochen, während ich abwesend war und beim Neustartzähler gab es einen 3127 (warum so viel ... IDK), aber für jeden Neustart gab es eine solche Datei übrig. Ich musste 3127 Dateien löschen .. nur weil PM2 einige seltsame Dateien erstellt ..

ist dort noch ein ähnliches Problem aufgelistet .. oder kennen Sie eine mögliche Behebung oder Erklärung?

edit: Ich habe erkannt, dass diese Dateien nicht neu gestartet werden .. erstellt, weil sie es ohne Gegen Neustart jetzt sind> 0

nur um sicherzugehen, wird der Code aufgeschlüsselt:

var feed = require('feed-read'); 
 
var http = require('http'); 
 
var async = require('async'); 
 
var request = require('request'); 
 
var utf8 = require('utf8'); 
 
var sprintf = require('sprintf-js').sprintf; 
 

 
var UNABLE_TO_CONNECT = "Unable to connect."; 
 
var CURFEED = ""; 
 
var PUBDATE = new Array(); 
 
var FEEDS = new Array(); 
 
FEEDS["TEST"] = "http://lorem-rss.herokuapp.com/feed?unit=second&interval=4"; //test 
 

 
var LISTID = new Array(); 
 
LISTID["TEST"] = "TRELLO_COLUMN"; 
 

 
var Trello = require("node-trello"); 
 
var t = new Trello("", ""); 
 

 
(function() { 
 

 
    var timeout = setInterval(function() { 
 
    async.parallel([ function(callback) { 
 
     CURFEED = "TEST"; 
 
     feedMe(CURFEED); 
 
     // TODO: where to call callback()? 
 
    } ], function done(err, results) { 
 
     console.log("Done"); 
 
     if (err) { 
 
      throw err; 
 
     } 
 
    }); 
 
    }, 1000); 
 
})(); 
 

 
function feedMe(feedName){ 
 

 
    if(FEEDS[feedName] == "" || FEEDS[feedName] == undefined){ 
 
     return; 
 
    } 
 
    feed(FEEDS[feedName], "ISO-8859-16", function(err, articles) { 
 
     // console.log("------------------------- " + FEEDS[feedName]); 
 
     if (err) { 
 
      // html.push("<p>", UNABLE_TO_CONNECT = "</p>"); 
 
      console.log(UNABLE_TO_CONNECT); 
 
     } else { 
 
     var updated = false; 
 
     var newArticle = new Array(); 
 
      articles.forEach(function(entry) { 
 
       var merkDate = new Date(entry.published); 
 
       var oldDate = new Date(PUBDATE[feedName]); 
 

 
       if(PUBDATE[feedName] == "" || PUBDATE[feedName] == undefined){ 
 
       PUBDATE[feedName] = merkDate; 
 
       } 
 

 
       if(oldDate.getTime() < merkDate.getTime()){ 
 
       updated = true; 
 
       newArticle.push(entry); 
 
       } 
 
      }); 
 

 
      if(newArticle.length > 0){ 
 
      for (var i = newArticle.length - 1; i >= 0; i--) { 
 
       var entry = newArticle[i]; 
 

 
       console.log(sprintf("----------------------------------------------------------")); 
 
       console.log(sprintf("> %1$s %2$s: %3$s", "New-RSS-Entry", "detected", "Checking")); 
 
       console.log(sprintf("---%1$s %2$s: %3$s", "Entry-Name", "", entry.title)); 
 
       console.log(sprintf("----%1$s %2$s: %3$s", "Link-Name", "", entry.link)); 
 
       console.log(sprintf("--%1$s %2$s: %3$s", "Create-Date", "", entry.published)); 
 
       console.log(sprintf("-------%1$s %2$s: %3$s", "Status", "", "Creating-Trello-Card")); 
 

 
       t.post("/1/lists/"+LISTID[feedName]+"/cards", {name: entry.title, desc: entry.link} , function(err, data){ 
 
       t.put("/1/cards/"+data.id+"/pos", {value: 0}, function(err, data){ 
 
       }); 
 
       }); 
 

 
       console.log(sprintf("-------%1$s %2$s: %3$s", "Status", "", "Trello-Card fully created")); 
 
       console.log(sprintf("> %1$s %2$s: %3$s", "New-RSS-Entry", "detected", "Closing")); 
 
      } 
 
      } 
 

 
      if(updated == true){ 
 
      PUBDATE[feedName] = new Date(); 
 
      } 
 

 
     } 
 
    }); 
 
}

+0

Kann möglich sein, während PM2 konfigurieren temporäre Datei festgelegt, wenn es ein Problem oder einen Fehler gibt ?? –

+0

Ich weiß nicht, wo diese Konfiguration sein sollte ... Die Dokumentation sagt nichts über die Dateien – Machigatta

+0

Könnten Sie den Befehl hinzufügen, den Sie verwenden, um bot.js mit PM2 zu starten? – leroydev

Antwort

1

Ok, ich untersuchte die Dateien und bekam die Lösung jetzt. Verwenden Sie einfach nicht mehr require('feed-read').

Es scheint wie Dateien zu erstellen, um es zu verschlüsseln und anschließend zu streamen.

Die Hauptprobleme sind die folgenden:

  • bekam Rss-Feed eine falsche Syntax
  • Server ist nicht verfügbar
  • Server

Wenn eines der Dinge, ein DB-Fehler oder etwas Rückkehr oben geschehen, wird die Datei danach nicht gelöscht. Einige von ihnen waren leer. Aber ich habe einen vBulletinRss-Feed gefunden, der den "DB Error" zurückgegeben hat.

Um das aufzurunden, verwenden Sie einfach eine Anfrage und analysieren Sie es selbst.