Um ein Node – Script als ein Deamon auszuführen, ist nur ein Startscript nötig.
Als Beispiel wird ein Node Script zum Starten einer „Homematic“-Komponente „ccu.io.js“ auf einem Mac-Server dargestellt.
Voraussetzungen:
- Hier wird davon ausgegangen das Node Funktionsfähig Installiert ist.
- In diesem Fall ist die CCU.IO-Komponente, im Verzeichnis /opt, ebenfalls funktionsfähig installiert.
- Sollte hier ein User die Komponente CCU.IO starten wollen, dann bitte auch entsprechende Lese und Schreibrechte in dem Verzeichnis setzen.
- Sollte ein Script mit Root-Rechten angesprochen werden, ist ebenfalls ein Rootzugriff oder ein Eintrag in der Sudo-Liste erforderlich
- Ein Root-zugriff ist bei Komponenten erforderlich, welche in die Systemeigenen Log-Verzeichnisse schreiben möchten.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>de.homematic.ccuio</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/node</string> <string>/opt/ccu.io/ccu.io-server.js</string> <string>start</string> </array> <key>WorkingDirectory</key> <string>/opt/ccu.io</string> <key>StandardOutPath</key> <string>/opt/log/ccu.io.log</string> <key>StandardErrorPath</key> <string>/opt/log/ccu.io.log</string> <key>KeepAlive</key> <true/> </dict> </plist> |
Die Startscriptvorlage wurde in diesen Beispieln unter /Users/Stephan/Desktop mit dem Name ccuio.plist gespeichert.
Prolog
Zuerst muss Überlegt werden wann das Script gestartet werden soll und mit welchen Rechten.
Sollte es ausreichen, das dieses Script gestartet wird wenn sich ein Benutzt am PC anmeldet, dann kann im nachfolgenden bei dem Eintrag „User-Startscript“ weiter gearbeitet werden.
Sollte das Script aber mit Root-Rechten oder bei einem Start des PC ausgeführt werden dann ist beim Eintrag „Root-Startscript“ weiter zu arbeiten.
User-Startscript
Bei jeder Anmeldung des Users wird das Startskript automatisch ausgeführt.
Kopiere eine existierende plist aus dem User-Verzeichnis in das LaunchAgents Verzeichnis des Users. (Beachte auch am Ende des Beitrags die Verzeichniserklärung).
1 |
cp /Users/Stephan/Desktop/ccuio.plist ~/Library/LaunchAgents/ccuio.plist |
Laden des Scripts
1 |
launchctl load ~/Library/LaunchAgents/ccuio.plist |
Sarte das Script
1 |
launchctl start de.homematic.ccuio |
Root-Startscript
Für nachfolgende Aktionen in einem Terminal ist ein Sudo (mit Adminpasswort) erforderlich.
Kopiere eine existierende plist aus dem User-Verzeichnis in das LaunchAgents Verzeichnis. (Beachte auch am Ende des Beitrags die Verzeichniserklärung)
1 |
sudo cp /Users/Stephan/Desktop/ccuio.plist /Library/LaunchAgents/ccuio.plist |
Ändere den Besitzer auf root
1 |
sudo chown root /Library/LaunchAgents/ccuio.plist |
Passe die Dateirechte an.
1 |
sudo chmod 644 /Library/LaunchAgents/ccuio.plist |
Lade das Script
1 |
sudo launchctl load /Library/LaunchAgents/ccuio.plist |
Sarte das Script
1 |
sudo launchctl start de.homematic.ccuio |
Zusätze
Stopt das Script (User-Script)
1 |
launchctl stop de.homematic.ccuio |
Stopt das Script (Root-Script)
1 |
sudo launchctl stop de.homematic.ccuio |
Entläd das Script (User-Script)
1 |
launchctl unload ~/Library/LaunchAgents/ccuio.plist |
Entläd das Script (Root-Script)
1 |
sudo launchctl unload /Library/LaunchAgents/ccuio.plist |
Anzeigen einer Liste, was alles unter „homematic“ im launchd eingetragen ist.
1 |
sudo launchctl list |grep homematic |
Testen was alles unter einem CCU.IO läuft
1 |
ps -ef|grep ccu.io |
Verzeichniserklärung
~/Library/LaunchAgents ……….→ Userskript, wird ausgeführt, wenn sich $USER anmeldet. Owner = $USER
/Library/LaunchAgents ………. → Wird bei jedem User bei der Anmeldung ausgeführt. Owner = root
/Library/LaunchDaemons ……… → Wird beim Systemstart ausgeführt. Owner = root
/System/Library/LaunchAgents … → Sollte nicht verwendet werden!
/System/Library/LaunchDaemons .. → Sollte nicht verwendet werden!