|
<< Click to Display Table of Contents >> Navigation: Gemstone/S - Datenbank > Gemstone - Linux-Service Support |
Zum Starten und Stoppen einer PAS Anwendung als Service muß man aus dem Checkout des GsDevKit_stones im Unterverzeichnis "pas-app-templates" die Skripte "pas_start_stone_app.sh" und "pas_stop_stone_app.sh" kopieren und anpassen und in das unix-scripts Verzeichnis der Anwendung kopieren.
Dieses Skript startet die gesamte Anwendung. Die notwendigen Informationen werden aus der Datei "credentials.sh" im "unix-scripts" der Anwendung entnommen. Diese muss vollständig konfiguriert sein
Dieses Skript stoppt die gesamte Anwendung. Die notwendigen Informationen werden aus der Datei "credentials.sh" im "unix-scripts" der Anwendung entnommen. Diese muss vollständig konfiguriert sein
Basierend auf den beiden obigen Skripten arbeiten die service-Skripte für die Anwendung unter Linux, damit die Anwendung als service gestartet - und auch entsprechend heruntergefahren werden kann.
Mit der installierten Runtime (pas/git/GsDevKit_stones) auf dem Server gibt es Templates (Unterverzeichnis "services") für ein Systemstartskript unter Linux.
Dabei gibt es zwei Versionen der Skripte
•gemstone_all - Ein Skript, wenn die zusätzlichen Dienste (PostgreSQL und RabbitMQ) auf dem gleichen Rechner gestartet werden. Dann wird die Anwendung erst gestartet, wenn PostgreSQL und RabbitMQ bereits gestartet sind.
•gemstone - Ein Skript, wenn die zusätzlichen Dienste (PostgreSQL und RabbitMQ) auf einem anderen Rechner gestartet werden.
Eines dieser Skripte kopiert man nach "/etc/init.d" als "service-name" und man beachte, daß die Datei Ausführungsrechte besitzt, den korrekten Benutzername definiert und auch im richtigen Verzeichnis die beiden Skripte "pas_start_stone.sh" bzw. "pas_stop_stone_app.sh" aufruft.
Um die Skripte in die Ablaufpfade von Linux einzuführen, muß man den folgenden Befehl durchführen:
sudo systemctl enable <service-name>
Danach kann man das System starten:
sudo systemctl <service-name> start)
oder stoppen
sudo systemctl <service-name> stop
Im folgenden wird ein Skript gezeigt. Daraus kann man die allgemeine Funktionsweise erkennen
#!/bin/bash
### BEGIN INIT INFO
# Required-Start: $local_fs $network $syslog $time
# Required-Stop: $local_fs
# Provides: gs_app_name
# Default-Start: 2
# Default-Stop: 0 6
# Description: Shutdown or Reboot a Gemstone based application
### END INIT INFO
#
# Copy this script into /etc/init.d and use it as template for starting the service
#
# systemctl enable gs_app_name
#
# will enable the service. It needs a remote PopstgreSQL database and a remote RabbitMQ Server
#
#
# The user the application is running under ...
#
export GS_APP_USER=<name>
case "$1" in
start)
sudo -u $GS_APP_USER -- bash -i -c 'cd ${HOME}/<project-folder>/unix-scripts ; ./pas_start_stone_app.sh'
;;
stop)
sudo -u $GS_APP_USER -- bash -i -c 'cd ${HOME}/<project-folder>/unix-scripts ; ./pas_stop_stone_app.sh'
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
exit 0
•Man muß folgendes berücksichtigen: Die service-Skripte starten die Anwendung als normaler Benutzer und so sollte es sein. In den Linux System Start-/Stop Skripte wird extra der Benutzer gewechselt (von root zum normalen Benutzer), damit die eigentlichen Skripte korrekt durchgeführt werden. Wenn man das nicht machen würde, dann können spätere Tasks (z.B. cronjobs) sich nicht mit der Datenbank verbinden, weil der Versuch zurückgewiesen wird, den SharedMemory zu nutzen: "access denied".