Ich verwende diese Definition für einen systemd
Job:
[Unit]
Description=Some job
[Service]
ExecStart=/usr/local/sbin/somejob
User=dlt
Type=forking
[Install]
WantedBy=multi-user.target
Das Skript wird wie folgt aufgerufen (Aufruf einer einfachen Routine, die einen TCPIP-Socket abhört und die Eingabe an eine Datei anhängt):
#!/bin/sh
cd /home/user/tmp/testout
nohup java -jar /home/user/programming/tests/java/core/SocketTest/SocketTest.jar </dev/null >/dev/null &
Nach dem systemctl start somejob
Prozess wird als ausgeführt angezeigt, mit init
als übergeordnetem Element:
user@CANTANDO ~$ ps -u dlt eo pid,ppid,command
PID PPID COMMAND
8718 1 java -jar /home/user/programming/tests/java/core/SocketTest/SocketTest.jar
Nach dem Ausführen wird systemctl stop somejob
der Vorgang nicht mehr angezeigt (und der Port ist geschlossen).
Also alles scheint gut und gut
Meine Frage ist: Ist dies eine akzeptable Lösung, um einen Java-Daemon mit systemd
auszuführen, oder gibt es Vorbehalte und damit andere stabilere oder sicherere Wege, um dies zu erreichen?