1.自启动服务脚本
在 /etc/systemd/system 目录下 新建脚本
cd /etc/systemd/system
vim sonarqube.service
[Unit]
#描述
Description=Sonarube Service
#代表要在其他的某些程序完成之后再执行.这些服务启动后,才允许启动Sonarube服务
After=syslog.target network.target
[Service]
Type=forking
# 绝对地址
ExecStart=/home/sonar/sonarqube-7.6/sonarqube-7.6/bin/linux-x86-64/sonar.sh start
# 绝对地址
ExecStop=/home/sonar/sonarqube-7.6/sonarqube-7.6/bin/linux-x86-64/sonar.sh stop
#启动的用户名
User=sonar
#启动的用户所在组
Group=sonar
Restart=always
#重启时间
RestartSec=120
LimitNOFILE=131072
LimitNPROC=8192
[Install]
# 服务级别相当于3 分配到multi-user.target这个服务组上;multi-user.target是系统默认的服务组,系统为这个服务组分配了一个权限,允许multi-user.target服务组中所有的服务可以随系统启动而自动启动;
# 即,只要把一个服务分配到multi-user.target这个服务组中,那么这个服务就可以随系统启动而自动启动了
WantedBy=multi-user.target
解释:
After=代表要在其他的某些程序完成之后再执行.
Type=代表执行顺序和方式.
Type=simple(默认值): systemd认为该服务将立即启动. 服务进程不会fork. 如果该服务要启动其 他服务, 不要使用此类型启动, 除非该服务是socket激活型.
Type=forking: systemd认为当该服务进程fork, 且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求, 使用此类型启动即可. 使用此启动类型应同时指定 PIDFile=, 以便systemd能够跟踪服务的主进程.
Type=oneshot: 这一选项适用于只执行一项任务、随后立即退出的服务. 可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态.
Type=notify: 与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号. 这一通知的实现由 libsystemd-daemon.so 提供.
Type=dbus: 若以此方式启动, 当指定的 BusName 出现在DBus系统总线上时, systemd认为服务就绪.
Type=idle: 服务会延迟启动, 一直到其他服务都启动完成之后才会启动此服务.
WantedBy=代表启动目标.
2. 加入开机自启动列表
# 开启自启动
systemctl enable sonarqube.service
# 关闭开机自启动
systemctl disable sonarqube.service
#启动服务
systemctl start sonarqube.service
#重启服务
systemctl restart sonarqube.service
#停止服务
systemctl stop sonarqube.service
# 查看状态
systemctl status sonarqube.service
# 若有脚本更新 需要重新加载一次
systemctl daemon-reload
3.报错信息
通过systemctl status sonarqube.service 发现状态不是active,说明服务是有问题的,只有状态是running才是说明服务已启动。
遇到这中情况,只能去看log,
sonarqube的安装路径
/path/sonarqube-7.6/sonarqube-7.6/logs
看最新的log即可,
sonar.log web.log …
在sonar.log发现如下图报错:
这里说明JVM启动失败,所有去看下sonar的JVM配置:
配置在安装路径conf目录下的wrapper.conf里的wrapper.java.command
vim /home/sonar/sonarqube-7.6/sonarqube-7.6/conf
备注:默认值是java,当时默认值的时候是手动启动是可以成功启动sonarqube的。