Antworten
Dez 26, 2017 - 12:59
Ich habe den NEO Server auch auf einer Synology laufen allerdings unter Windows 10.
Bisher außer das der NEO Server des öfteren mal abstürzt laufen die Tasks stabil und wenig verzögert.
Die Abstürze umgehe ich mit einem Monitorprogramm das den Prozess des Neo Server jede Minute überwacht und
wenn der nicht läuft den Neo Server wieder startet.
Den NEO Server starte ich beim Windowsstart und einem automatischen Login.
Ich habe keine Probleme mit den Dateien (Größe oder Menge) weil das ja unter Windows sich das ganz anders verhält.
Bisher außer das der NEO Server des öfteren mal abstürzt laufen die Tasks stabil und wenig verzögert.
Die Abstürze umgehe ich mit einem Monitorprogramm das den Prozess des Neo Server jede Minute überwacht und
wenn der nicht läuft den Neo Server wieder startet.
Den NEO Server starte ich beim Windowsstart und einem automatischen Login.
Ich habe keine Probleme mit den Dateien (Größe oder Menge) weil das ja unter Windows sich das ganz anders verhält.
Quelle: AM, Neo Server, Synology, Stabilität, Probleme Neo Server
Dez 27, 2017 - 08:00
für den, den es interessiert:
das Startscript ist etwas geändert (... die Zeile mit dem 'neo_server_logger')
Das ist der Logger 'neo_server_logger': als kleines "Schmankerl" filtere ich die lästige Zeile mit Fehlermeldung
node: /lib/libstdc++.so.6: no version information available (required by node)
die bei jedem Task-Aufruf kommt, heraus
Es entsteht nun eine Datei mit der maximalen angegebenen Größe (in dem Beispiel 100MB). Ist diese Größe erreicht, wir die Datei umbenannt (Dateiname + ~). Man braucht also 2x die angegeben Größe an Platz.
Und zu guten Letzt noch das Löschen der /tmp/_runner* - Scripte: 'neo_server_cleanup'
Das muss zyklisch aufgerufen werden - bei Synology als "geplante Aufgabe" (in den Systemeinstellungen), bei raspberry z.B. als cron-Eintrag.
Es werden dann alle Dateien mid diesem Muster gelöscht, die älter als 1 Tag sind
Das mit dem 'sudo -u mediola' ist nur, weil ich das bei mir alles unter einem eigenen Benutzer laufen lasse. Kann bei einer Installation auf dem raspberry natürlich wegfallen.
das Startscript ist etwas geändert (... die Zeile mit dem 'neo_server_logger')
#!/bin/sh
### BEGIN INIT INFO
# Provides: neo_server_daemon
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time for neo_server
# Description: Enable service provided by daemon.
### END INIT INFO
HOMEPATH=~mediola
PATH=$HOMEPATH/bin:$PATH
export PATH
PID=$(ps -ef | grep 'node automation.js' | egrep -v 'grep|sudo' | awk '{ print $2 }')
case "$1" in
start)
if [ ! -z "$PID" ]; then
echo "neo_server is already running"
else
cd "$HOMEPATH/neo_server"
( nice -10 sudo -u mediola node automation.js ) | neo_server_logger $HOMEPATH/log/neo_server.log 100mb 2>&1 &
echo "neo_server starting"
sleep 2
"$0" status
fi
;;
stop)
if [ -z "$PID" ]; then
echo "neo_server is not running"
else
kill "$PID"
echo "neo_server closed"
fi
;;
restart)
if [ -z "$PID" ]; then
"$0" start
else
"$0" stop
"$0" start
fi
;;
status)
if [ ! -z "$PID" ]; then
echo "neo_server is running PID $PID"
else
echo "neo_server is not running"
fi
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
exit 1
;;
esac
exit 0
... die Zeile mit dem 'neo_server_logger'Das ist der Logger 'neo_server_logger': als kleines "Schmankerl" filtere ich die lästige Zeile mit Fehlermeldung
node: /lib/libstdc++.so.6: no version information available (required by node)
die bei jedem Task-Aufruf kommt, heraus
#!/bin/php
$filename = "unknown.log";
if ($argc > 1)
$filename = $argv[1];
$maxsize = "10mb";
$maxsize = "1kb";
if ($argc > 2)
$maxsize = $argv[2];
$maxsize = preg_replace('/[gG][bB]$/', '*1024*1024*1024', $maxsize);
$maxsize = preg_replace('/[mM][bB]$/', '*1024*1024', $maxsize);
$maxsize = preg_replace('/[kK][bB]$/', '*1024', $maxsize);
$maxsize = preg_replace('/[bB]$/', '', $maxsize);
eval('$maxsize = '.$maxsize.';');
# line prefix
$log_pfx_date = 'd/m/Y H:i:s';
$log_pfx_tag = ' info: [neo_server_logger] ';
$ignore_pattern = '/.*node: \/lib\/libstdc\+\+\.so\.6: no version information available \(required .*node\)/';
$size = 0;
if (file_exists($filename)) {
$size = filesize($filename);
$s = date($log_pfx_date ,time()) . $log_pfx_tag . "open file '$filename' with size $size\n";
} else {
$s = date($log_pfx_date ,time()) . $log_pfx_tag . "create file '$filename'\n";
}
if (!($file = fopen($filename, 'a'))) {
error_log("unable to open/create file '$filename'");
exit(1);
}
$size += strlen($s);
fputs($file, $s);
while (!feof(STDIN)) {
$line = fgets(STDIN);
if (preg_match($ignore_pattern, $line))
continue;
$size += strlen($line);
if ($size > $maxsize) {
$s = date($log_pfx_date ,time()) . $log_pfx_tag . "rotate file '$filename' with size $size\n";
fputs($file, $s);
fclose($file);
$fn = $filename . "~";
if (!rename($filename, $fn)) {
error_log("unable to rename file '$filename'");
exit(1);
}
if (!($file = fopen($filename, 'a'))) {
error_log("unable to open/create file '$filename'");
exit(1);
}
$s = date($log_pfx_date ,time()) . $log_pfx_tag . "create file '$filename'\n";
fputs($file, $s);
$size = strlen($s);
}
fputs($file, $line);
}
$s = date($log_pfx_date ,time()) . $log_pfx_tag . "close file '$filename'\n";
fputs($file, $s);
fclose($file);
exit(0);
?>
Es entsteht nun eine Datei mit der maximalen angegebenen Größe (in dem Beispiel 100MB). Ist diese Größe erreicht, wir die Datei umbenannt (Dateiname + ~). Man braucht also 2x die angegeben Größe an Platz.
Und zu guten Letzt noch das Löschen der /tmp/_runner* - Scripte: 'neo_server_cleanup'
#!/bin/sh
exec sudo -u mediola find /tmp -name '_runner_*.js' -mtime +0 -delete
Das muss zyklisch aufgerufen werden - bei Synology als "geplante Aufgabe" (in den Systemeinstellungen), bei raspberry z.B. als cron-Eintrag.
Es werden dann alle Dateien mid diesem Muster gelöscht, die älter als 1 Tag sind
Das mit dem 'sudo -u mediola' ist nur, weil ich das bei mir alles unter einem eigenen Benutzer laufen lasse. Kann bei einer Installation auf dem raspberry natürlich wegfallen.
Jan 06, 2018 - 04:59
Das Cleanup-Script habe ich etwas überarbeitet
#!/bin/sh
sudo -u mediola find /tmp ! -readable -prune -o -name '_runner_*.js' -mtime +0 -exec /bin/rm -f {} \;
Neuen Kommentar hinzufügen