所以我在Ubuntu LTS服务器上部署我的Spring Boot应用程序。它使用maven构建并运行嵌入式Tomcat。
我仍然是部署过程的新手,我所做的是:
现在所有这些都完美无缺,而且我一直在使用它这样安静一段时间。现在,我必须在退出shell后使应用程序保持在线并可用。
我已经阅读了一些关于在Linux后台运行流程的文档,我已经使用nohup java -jar myApplication.jar &
命令和screen
尝试了bg
。当我登录ssh时,所有这些都工作正常。
我的问题出现了:
一旦我结束了ssh会话,Web应用程序仍然可用(因此该过程显然没有停止)但它只是看起来&表现得很奇怪。 CSS没有应用,JS不起作用等。
我的猜测是某些路径或文件系统访问被搞砸了,但我完全不知道它是如何产生于ssh会话的。
(当我重新登录ssh时,一切都恢复正常)
如果有人在这里有线索会很棒
答案 0 :(得分:1)
如果您的服务器具有加密的主目录,则在您注销后将重新加密,因此您的脚本将停止工作。在服务器上加密家庭没有多大意义,所以你可以禁用它。
或者只是从不同的目录运行脚本,避免使用主目录下的文件。
答案 1 :(得分:0)
我认为你应该在这种情况下使用systemd
。
您还可以为您的应用添加新的系统用户。
您可以在此处找到更多信息:
Spring Boot: 59.2.2 Installation as a systemd service
Ubuntu Wiki: Systemd For UpstartUsers
例如:
创建文件myunit.service
[Unit]
Description=MySpringService
After=syslog.target
After=network.target
After=mysql.service
[Service]
Type=forking
PIDFile=/work/www/myunit/shared/tmp/pids/service.pid
WorkingDirectory=/work/www/myunit/current
User=myunit
Group=myunit
Environment=RACK_ENV=production
OOMScoreAdjust=-1000
ExecStart=/usr/local/bin/bundle exec service -C /work/www/myunit/shared/config/service.rb --daemon
ExecStop=/usr/local/bin/bundle exec service -S /work/www/myunit/shared/tmp/pids/service.state stop
ExecReload=/usr/local/bin/bundle exec service -S /work/www/myunit/shared/tmp/pids/service.state restart
TimeoutSec=300
[Install]
WantedBy=multi-user.target
将文件复制到/etc/systemd/system/
跑:
systemctl enable myunit
systemctl start myunit