按照此处的说明,我从spring引导项目(1.5.8)中创建了一个可执行jar,以便将其作为服务运行(我想在port上运行它443)。如果仅以开始启动,java -jar proj.jar则会出现错误消息,指出该端口正在使用中,但是使用sudo java -jar proj.jartomcat可以启动并且该站点可以正常工作。
443
java -jar proj.jar
sudo java -jar proj.jar
我试图允许对jar的低级别端口访问,但是仍然出现错误。(sudo setcap CAP_NET_BIND_SERVICE=+eip /path/to/jar或setcap 'cap_net_bind_service=+ep' /path/to/jar)
sudo setcap CAP_NET_BIND_SERVICE=+eip /path/to/jar
setcap 'cap_net_bind_service=+ep' /path/to/jar
如何赋予jar / tomcat低级端口访问权限,以便它在443上运行并且可以将其作为服务启动?
作为非root用户,我通过以下方式安装了jar:
chmod +x ./mvnw
./mvnw package -Dmaven.test.skip=true
cd target
sudo ln -s /home/user/projectname/target/proj-0.0.1-SNAPSHOT.jar /etc/init.d/projectname
sudo chmod +x /etc/init.d/projectname
sudo update-rc.d projectname defaults
sudo service projectname start
检查日志文件,我可以看到错误,但是正如我提到的,如果我使用sudo启动jar,它就可以工作。
The Tomcat connector configured to listen on port 443 failed to start. The port may already be in use or the connector may be misconfigured.
我希望有人能给我一个更好的答案,但是如果我直接向Java添加了低级端口访问权限(我已经安装了oracle),则可以启动jar sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/lib/jvm/java-8-oracle/jre/bin/java 。 sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/lib/jvm/java-8-oracle/bin/java
sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/lib/jvm/java-8-oracle/jre/bin/java
sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/lib/jvm/java-8-oracle/bin/java
应该也适用于OpenJDK,但是具有不同的可执行位置,我用以下方法进行检查: echo $PATH
echo $PATH