Der Befehl im Dienst wird anders ausgeführt, wenn er im Terminal ausgeführt wird

313
OrangePot

Ich habe eine Kriegsakte, mit der ich laufen kann: java -jar /opt/path/to/my.war

Derselbe Befehl befindet sich in einer Datei für den Dienst, die wie folgt aussieht:

[Unit] Description=My Service  [Service] WorkingDirectory=/opt/path/to/ ExecStart=/opt/path/to/jre8/jre/bin/java -jar /opt/path/to/my.war --spring.profiles.active=prod PIDFile=/opt/path/my.pid  [Install] WantedBy=multi-user.target 

Wenn ich service myservice startden Dienst starte, wird der Dienst so gestartet, wie er es allein mit dem Befehl tun würde. Der Unterschied ist, dass beim serviceLaden einer Webseite ein Fehler in der Browserkonsole auftritt:

Uncaught Error: [$injector:modulerr] Failed to instantiate module myApp due to: Error: [$injector:nomod] Module 'myApp' is not available! 

Der Browser zeigt eine leere Seite an.

Beachten Sie, dass dies /optnur über verfügbar ist sudo su. Den Befehl nur in suWorks ausführen. Das Problem ist also, dass etwas anders geschieht, wenn der Dienst den Befehl ausführt, aber ich weiß nicht was.

0
Wenn Sie den Dienst über den Dienst ausführen, gehe ich davon aus, dass er als Root ausgeführt wird. Wenn Sie ihn ausführen, wird er als Benutzer ausgeführt, was möglicherweise das Problem ist. Mikael Kjær vor 7 Jahren 0

1 Antwort auf die Frage

-1
shubham0d

Ich denke, Sie erstellen eine Unit-Datei, die mit systemctl verwendet werden sollte. Also probieren Sie das aus systemctl start myservice.

service myservice start, von dem OrangePot sagt, dass es auf den meisten Systemen dasselbe tun wird Mikael Kjær vor 7 Jahren 0