Notitz an mich selbst
Wenn TS mit MySQL laufen soll, sollte MySQL vor TS gestartet werden.
Wenn TS mit MySQL laufen soll, sollte MySQL vor TS gestartet werden.
Spätestens wenn man seine Node.js-Anwendung produktiv einsetzen möchte, möchte man diese als Deamon laufen lassen und von einem Watchdog überwachen lassen.
Upstart eignet sich dafür hervorragend. Aber was, wenn weder CentOS noch Ubuntu zur Hand sind? Hier kommen die Deamontools ins Spiel.
1 |
apt-get install daemontools daemontools-run |
Eine einfache möglichkeit Node.js zu installieren bietet NVM.
1 |
wget -qO- https://raw.github.com/creationix/nvm/master/install.sh | sh |
1 |
source ~/.profile |
1 2 |
nvm install 0.10 n=$(which node);n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr/local |
Anstelle node im Root-Verzeichnis zu starten, wird die aktive Version nach ‚/usr/local/‘ kopiert und allen Usern verfügbar gemacht.
Kurzer Test:
1 2 |
node > console.log('foo') |
Um Node.js auszuführen, wird ein neuer User angelegt:
1 |
adduser --disabled-password node |
Eine kleine Test-Anwendung, die nach 10 Intervallen neu gestartet werden möchte:
1 |
vim /var/node/test.js |
1 2 3 4 5 6 7 8 9 10 11 |
console.log('starting up'); var counter = 0; var timer = setInterval(function(){ console.log('running'); counter++; if (counter >= 10) { throw new Error('going down...'); } },1000 ); |
Zurück zu den Deamontools. Oben wurde mit der Installation ‚/etc/service‘ angelegt. Erstellen wir einen neuen Dienst zunächst im Home-Verzeichnis (hier: ‚/home/node/sevice/‘), indem folgende Verzeichisstruktur angelegt wird:
1 2 3 4 5 |
root \_ service \_ testjs \_ log \_ main |
Hierher gehört das Run-Script:
1 |
vim /root/service/testjs/run |
1 2 3 4 |
#!/bin/sh exec 2>&1 #alle Ausgaben in STDOUT exec setuidgid node node /var/node/test.js |
1 |
chmod +x /root/service/testjs/run |
Um zu sehen was passiert, brauchen wir ein Log:
1 |
vim /root/service/testjs/log/run |
1 2 3 4 |
#!/bin/sh exec 2>&1 exec multilog t s999999 n30 ./main |
Durch das Erzeugen eines Symlinks in ‚/etc/service‘, wird der Dienst gestartet und überwacht:
1 |
ln -s /root/service/testjs /etc/service/testjs |
Jetzt sollte unsere Test-Anwendung unter User ’node‘ laufen. Um das zu prüfen:
1 |
tail -f /etc/service/testjs/log/main/current |
Ein
1 |
ps fxao ruser,comm |
sollte etwa folgendes ausgeben:
1 2 3 4 5 6 |
root svscanboot root \_ svscan root | \_ supervise node | | \_ node root | \_ supervise root | \_ multilog |
Installation von Starbound, Init-Script und Backup-Script.