问题描述
命令:
java -Xms1024m -Xmx1024m -jar /usr/local/java/bin/mashang/app.jar --server.port=8532 ----spring.profiles.active=test
是可以直接启动的,但是注册service后,使用systemd无法启动
解决思路及方法
vim /etc/systemd/system/mashang.service
查看service文件如下
[Unit]
Description=Mashang Service
After=network.target nginx.service
Requires=nginx.service
[Service]
Type=simple
User=root
Group=root
ExecStart=java -Xms1024m -Xmx1024m -jar /usr/local/java/bin/mashang/app.jar --server.port=8532 ----spring.profiles.active=test
Restart=on-failure
[Install]
WantedBy=multi-user.target
启动日志:
Jul 20 21:13:28 localhost systemd[1]: mashang.service: Main process exited, code=exited, status=203/EXEC
Jul 20 21:13:28 localhost systemd[1]: mashang.service: Failed with result 'exit-code'.
Jul 20 21:13:28 localhost systemd[1]: mashang.service: Scheduled restart job, restart counter is at 5.
Jul 20 21:13:28 localhost systemd[1]: Stopped Mashang Service.
Jul 20 21:13:28 localhost systemd[1]: mashang.service: Start request repeated too quickly.
Jul 20 21:13:28 localhost systemd[1]: mashang.service: Failed with result 'exit-code'.
Jul 20 21:13:28 localhost systemd[1]: Failed to start Mashang Service.
排除方向一:nohup
在Linux系统中,使用nohup命令主要是为了在终端关闭或用户登出后,使命令或脚本在后台继续运行,并且其输出通常会被重定向到一个名为nohup.out的文件中(除非用户指定了其他输出文件)。但是,如果你尝试在开机启动脚本(如/etc/init.d/中的脚本,或使用systemd的.service文件)中使用nohup来启动某个服务或脚本,可能会遇到一些问题。
以下是一些原因和解决方案:
- 不适合开机启动:nohup主要用于在交互式shell中运行命令,使其在后台运行并忽略挂起(HUP)信号。在开机启动脚本中,你通常不需要nohup,因为这些脚本本身就是在系统启动时以非交互式方式运行的。
- 日志重定向:如果你使用nohup并将输出重定向到某个文件,那么在系统启动过程中可能会出现权限问题或路径问题。确保你的脚本有足够的权限来写入指定的日志文件,并且路径是正确的。
- systemd替代方案:如果你使用的是现代Linux发行版,建议使用systemd来管理服务,而不是传统的init脚本。你可以创建一个.service文件,并指定你的服务应该如何启动、停止和重启。在.service文件中,你可以使用ExecStart指令来指定要运行的命令或脚本,而无需使用nohup。
- 环境变量问题:nohup命令可能会改变某些环境变量,这可能会影响你的脚本的运行。在开机启动脚本中,环境变量可能与你在交互式shell中看到的不同。确保你的脚本不依赖于任何特定的环境变量,或者在你的脚本中显式设置这些变量。
- 调试和日志记录:如果你的脚本在开机时无法启动,请确保启用详细的日志记录,并检查系统日志(如/var/log/syslog、/var/log/messages或journalctl)以获取更多信息。你还可以尝试在脚本中添加set -x来启用跟踪,以便查看脚本在运行时执行的每个命令。
- 权限问题:确保你的开机启动脚本和要运行的命令或脚本具有正确的权限。你可能需要使用chmod和chown命令来设置适当的权限和所有权。
- 总之,虽然nohup在某些情况下很有用,但在Linux的开机启动脚本中通常不是必需的。如果你遇到问题,请考虑使用其他方法(如systemd)来管理服务,并检查日志以获取更多信息。
排除方向二:使用绝对路径而不是相对路径
java改绝对路径后正常
vim /etc/systemd/system/mashang.service
查看service文件如下
```bash
vim /etc/systemd/system/mashang.service
查看service文件如下
[Unit]
Description=Mashang Service
After=network.target nginx.service
Requires=nginx.service
[Service]
Type=simple
User=root
Group=root
ExecStart=java -Xms1024m -Xmx1024m -jar /usr/local/java/bin/mashang/app.jar --server.port=8532 ----spring.profiles.active=test
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl status mashang