Für den Betrieb des datasqill Servers sind zwei Softwarekomponenten erforderlich
Der datasqill Server wird entweder in Form einer WebApp in einem TomEE-Server (Version 3.x) oder als SpringBoot Applikation (Version ≥ 4.0) betrieben.
Hinweis: Alle nachfolgenden Unix-Befehle sind als User datasqill abzusetzen!
Unterscheidung Crontab oder Linux-Systemdienste
Es gibt zwei Wege, wie man die beiden datasqill Komponenten starten kann
Davon abhängig sind dann die Verfahren unterschiedlich, die man im Betrieb zum Start und Stop der H2 Datenbank und des datasqill Servers verwendet.
Die Überprüfung, welches Verfahren zur Steuerung der Komponenten bei der Installation eingerichtet wurde, kann so erfolgen.
crontab -l | grep -q h2.sh && echo "Server is managed by crontab"
systemctl status h2 >> /dev/null && echo "Server is managed by systemctl"
Es sollte genau eine der folgenden Ausgaben erscheinen:
Unterscheidung SpringBoot Applikation oder WebApp in TomEE
Bis zur Version 3.5.9 wurde der datasqill Server als WebApp in TomEE ausgeliefert. Mit Wechsel auf 4.0.0 wurde SpringBoot als Container eingesetzt, was den Betrieb vereinfacht.
Welchen Container, SpringBoot oder TomEE, eine datasqill Installation verwendet, kann so geprüft werden:
[[ -f /home/datasqill/datasqill-server/webapps/datasqill-server.war ]] && echo "Deployment as web app in TomEE"
[[ -f /home/datasqill/lib/datasqill-server.war ]] && echo "Deployment as SpringBoot application"
Daraufhin sollte genau eine der beiden folgenden Meldungen erscheinen:
Die verschiedenen Verfahren und die Einrichtung bzw. Kontrolle der Softwarekomponenten sind in den nachfolgenden Abschnitten beschrieben:
Um die H2 über Crontab-Einträge automatisch beim Bootvorgang zu starten, muss man als User datasqill den Crontab-Editor aufrufen
$ crontab -e
und dort folgende Zeile eintragen:
@reboot /home/datasqill/h2server/h2.sh 2>&1 >> /home/datasqill/h2.log
Wird der TomEE als Container verwendet, wird über denselben Weg (crontab -e) zusätzlich die folgende Zeile ergänzt:
@reboot . /home/datasqill/bin/datasqill.env && /opt/apache-tomee/bin/catalina.sh start 2>&1 >> /home/datasqill/tomee.log
Bei SpringBoot als Container ist folgender Crontab Eintrag zu ergänzen:
@reboot /home/datasqill/bin/datasqill 2>&1 >> /home/datasqill/datasqill.log
Ob die H2-Datenbank läuft, kann mit folgender Anweisung überprüft werden:
$ pgrep -a h2
1011 /bin/bash /home/datasqill/h2server/h2.sh
Bei Verwendung von TomEE als Container erfolgt die Prüfung mit:
$ pgrep -a -f tomee
1052 /usr/bin/java -Djava.util.logging.config.file=/home/datasqill/datasqill-server/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -javaagent:/opt/apache-tomee/lib/openejb-javaagent.jar -Djdbc.drivers=net.snowflake.client.jdbc.SnowflakeDriver:org.apache.hive.jdbc.HiveDriver -Dde.softquadrat.datasqill.mappertool=/home/datasqill/bin/getkey -Djava.security.egd=file:/dev/urandom -Dtomee.port=17491 -Dtomee.shutdown_port=8005 -Dtomee.shutdown_command=SHUTDOWN -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Xms512M -Xmx1G -Djava.net.preferIPv4Stack=true -Dignore.endorsed.dirs= -classpath /home/datasqill/lib/jdbc/h2-1.4.199.jar:/opt/apache-tomee/bin/bootstrap.jar:/opt/apache-tomee/bin/tomcat-juli.jar -Dcatalina.base=/home/datasqill/datasqill-server -Dcatalina.home=/opt/apache-tomee -Djava.io.tmpdir=/home/datasqill/datasqill-server/temp org.apache.catalina.startup.Bootstrap start
Der SpringBoot Container wird so geprüft:
$ pgrep -a -f /home/datasqill/lib/datasqill-server.war
627 java -Djdbc.drivers=net.snowflake.client.jdbc.SnowflakeDriver:org.apache.hive.jdbc.HiveDriver -Dde.softquadrat.datasqill.mappertool=/home/datasqill/bin/getkey -Dde.softquadrat.datasqill.gui.downloaddir=/home/datasqill/guidownload -Djava.security.egd=file:/dev/urandom -Dserver.port=17491 -Dlogging.file.name=/home/datasqill/logs/datasqill.log -Dlogging.level.de.softquadrat=DEBUG -Dlogging.level.org.springframework.web.servlet.resource.ResourceHttpRequestHandler=DEBUG -Dlogging.level.org.springframework.web.servlet.DispatcherServlet=DEBUG -jar /home/datasqill/lib/datasqill-server.war
Bei Verwendung des TomEE als Container setzt man zum Stoppen dieses Kommando ab:
/opt/apache-tomee/bin/shutdown.sh
Ist der SpringBoot Container im Einsatz, erfolgt der Stop mit:
pkill -f /home/datasqill/lib/datasqill-server.war
Um die laufende H2 Datenbank zu stoppen, verwendet man folgenden Befehl;
$ /home/datasqill/h2server/stoph2.sh
Es ist auf die korrekte Reihenfolge zu achten, der datasqill Container muss vor der H2 heruntergefahren werden.
Um einen manuellen Start der H2 auszuführen, verwendet man:
/home/datasqill/h2server/h2.sh
Wird TomEE als Container eingesetzt, setzt man zum manuellen Start folgendes ab:
/opt/apache-tomee/bin/catalina.sh start
Bei Einsatz des SpringBoot Containers verwendet man zum manuellen Start:
/home/datasqill/bin/datasqill
Auch hier ist auf die korrekte Reihenfolge zu achten, die H2 muss vor dem datasqill Container gestartet werden.
Die Einrichtung des Linux-Systemdienstes für die H2 kann mit diesem Skript erfolgen (ggfs ist der Port und der home user anzupassen): Die Ausführung muss als root gemacht werden
#!/bin/bash
H2PORT=9092
H2HOME=/home/datasqill/h2server
if [[ ! -f /etc/systemd/system/h2-$H2PORT.service ]]
then
echo " Creating systemd service file for H2"
cat <<-EOF_SERVICE > /etc/systemd/system/h2-$H2PORT.service
[Unit]
Description=Datasqill H2 Repository $H2PORT
After=network.target
[Service]
ExecStart=$H2HOME/h2ctl.sh --foreground start
ExecStop=$H2HOME/h2ctl.sh --foreground stop
WorkingDirectory=$H2HOME
Restart=always
Type=simple
User=datasqill
Group=datasqill
KillMode=none
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=h2-9092.service
[Install]
WantedBy=multi-user.target
EOF_SERVICE
systemctl daemon-reload
else
echo " systemd service file for H2 repository already exists, nothing to be done"
fi
if [[ ! -h /etc/systemd/system/multi-user.target.wants/h2-$H2PORT.service ]]
then
echo " Install datasqill H2 repository as service"
systemctl enable h2-$H2PORT.service
echo " Starting datasqill H2 repository"
systemctl start h2-$H2PORT.service
else
echo " systemd service for datasqill H2 repository already exists, nothing to be done"
fi
echo " Display service status"
systemctl status h2-$H2PORT.service
Um den TomEE Container als Linux Service einzurichten, kann folgendes Skript ausgeführt werden:
[Unit]
Description=datasqill TomEE Web Application Container
Wants=network.target
After=network.target
[Service]
Type=forking
Environment=CATALINA_PID=/home/datasqill/datasqill-server/run/tomcat.pid
Environment=CATALINA_HOME=/opt/apache-tomee
Environment=CATALINA_BASE=/home/datasqill/datasqill-server
Environment='CATALINA_OPTS=-Xms512M -Xmx1G -Djava.net.preferIPv4Stack=true'
Environment='JAVA_OPTS=-Djava.awt.headless=true'
ExecStart=/opt/apache-tomee/bin/startup.sh
ExecStop=/opt/apache-tomee/bin/shutdown.sh
WorkingDirectory=/home/datasqill
SuccessExitStatus=143
User=datasqill
Group=datasqill
UMask=0007
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
Für die Einrichtung des SpringBoot Containers als Linux Service dient dieses Skript (ggfs Port und Home Directotry anpassen): Die Ausführung muss als root gemacht werden
#!/bin/bash
# https://docs.spring.io/spring-boot/docs/current/reference/html/deployment.html
# https://stackoverflow.com/questions/57025605/why-am-i-getting-exec-format-error-when-i-am-writing-my-linux-service
DATASQILLPORT=17491
DATASQILLHOME=/home/datasqill
if [[ ! -f /etc/systemd/system/datasqill-$DATASQILLPORT.service ]]
then
echo " Creating systemd service file for datasqill"
cat <<-EOF_SERVICE > /etc/systemd/system/datasqill-$DATASQILLPORT.service
[Unit]
Description=datasqill $DATASQILLPORT
After=syslog.target
[Service]
ExecStart=$DATASQILLHOME/bin/datasqill --foreground start
WorkingDirectory=$DATASQILLHOME
SuccessExitStatus=143
User=datasqill
Group=datasqill
UMask=0007
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
EOF_SERVICE
systemctl daemon-reload
else
echo " systemd service file for datasqill already exists, nothing to be done"
fi
if [[ ! -h /etc/systemd/system/multi-user.target.wants/datasqill-$DATASQILLPORT.service ]]
then
echo " Install datasqill as service"
sudo systemctl enable datasqill-$DATASQILLPORT.service
echo " Starting datasqill service"
sudo systemctl start datasqill-$DATASQILLPORT.service
else
echo " systemd service for datasqill already exists, nothing to be done"
fi
echo " Display service status"
systemctl status datasqill-$DATASQILLPORT.service
Ob die H2-Datenbank läuft, kann mit folgender Anweisung überprüft werden:
$ systemctl status h2-9092
● h2-9092.service - Datasqill H2 Repository 9092
Loaded: loaded (/etc/systemd/system/h2-9092.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2023-08-11 16:49:56 CEST; 49min ago
Main PID: 2454 (h2ctl.sh)
CGroup: /system.slice/h2-9092.service
├─2454 /bin/bash /home/datasqill/h2server/h2ctl.sh --foreground start
└─2461 java -Xmx2G -cp /home/datasqill/h2server/lib/* org.h2.tools.Server -tcp -tcpPort 9092 -tcpAllowOthers -tcpPassword softquadrat -ifExists -baseDir /home/datas...
Falls der TomEE Container verwendet, kann sein Status mit folgendem Befehl überprüft werden:
$ systemctl status tomee
● tomee.service - datasqill TomEE Web Application Container
Loaded: loaded (/etc/systemd/system/tomee.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2023-07-27 17:06:27 UTC; 36s ago
Process: 984 ExecStart=/opt/apache-tomee/bin/startup.sh (code=exited, status=0/SUCCESS)
Main PID: 1023 (java)
CGroup: /system.slice/tomee.service
└─1023 /usr/bin/java -Djava.util.logging.config.file=/home/datasqill/datasqill-server/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -javaagent:/opt/ap...
Für den SpringBoot Container verwendet man dagegen:
$ systemctl status datasqill-17491
● datasqill-17491.service - datasqill
Loaded: loaded (/etc/systemd/system/datasqill-17491.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2023-08-11 17:34:29 CEST; 5min ago
Main PID: 9455 (datasqill)
CGroup: /system.slice/datasqill-17491.service
├─9455 /bin/bash /home/datasqill/bin/datasqill --foreground start
└─9463 java -Djdbc.drivers=net.snowflake.client.jdbc.SnowflakeDriver:org.apache.hive.jdbc.HiveDriver -Dde.softquadrat.datasqill.mappertool=/home/datasqill/bin/getke...
Bei Verwendung des TomEE als datasqill Container erfolgt ein Stop so:
sudo systemctl stop tomee
Für den SpringBoot Container sieht der Stop-Befehl dagegen so aus:
sudo systemctl stop datasqill-17491
Der Linux Service für die H2 wird mit folgendem Befehl gestoppt werden:
sudo systemctl stop h2-9092
Es ist darauf zu achten, dass der datasqill Container vor der H2 gestoppt wird.
Der manuelle Start der Dienste wird mit dem "start" Kommando ausgeführt.
Für die H2 sieht es so aus:
sudo systemctl start h2-9092
Im Falle der Verwendung des TomEE als Container sieht der manuelle Start so aus:
sudo systemctl start tomee
Der SpringBoot Container wird dagegen so gestartet:
sudo systemctl start datasqill-17491
Die H2 Datenbank muss immer vor dem datasqill Container gestartet werden.