systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动。
systemd对应的进程管理命令是systemctl
一、在linux下部署服务步骤:
1.在目录/etc/systemd/system(Ubuntu)建立.service文件
2.service内容,如csdkb.service,这个是java的jar包
[Unit]
Description=Spring Boot Application
After=syslog.target
[Service]
ExecStart=/home/csdkb/server/csdkb.jar
[Install]
WantedBy=multi-user.target
.
.service文件定义了一个服务,分为[Unit],[Service],[Install]三个小节
[Unit]
Description:描述,
After:在network.target,auditd.service启动后才启动
ConditionPathExists: 执行条件
[Service]
EnvironmentFile:变量所在文件
ExecStart: 执行启动脚本
Restart: fail时重启
[Install]
Alias:服务别名
WangtedBy: 多用户模式下需要的
3.使用命令 systemctl start xxx,如 systemctl start csdkb
二、常用命令
systemctl 提供了一组子命令来管理单个的 unit,其命令格式为:
systemctl [command] [unit]
command 主要有:
start:立刻启动后面接的 unit。
stop:立刻关闭后面接的 unit。
restart:立刻关闭后启动后面接的 unit,亦即执行 stop 再 start 的意思。
reload:不关闭 unit 的情况下,重新载入配置文件,让设置生效。
enable:设置下次开机时,后面接的 unit 会被启动。
disable:设置下次开机时,后面接的 unit 不会被启动。
status:目前后面接的这个 unit 的状态,会列出有没有正在执行、开机时是否启动等信息。
is-active:目前有没有正在运行中。
is-enable:开机时有没有默认要启用这个 unit。
kill :不要被 kill 这个名字吓着了,它其实是向运行 unit 的进程发送信号。
show:列出 unit 的配置。
mask:注销 unit,注销后你就无法启动这个 unit 了。
unmask:取消对 unit 的注销。
三、可能出现的问题
1.执行start语句时,不成功,通过status命令,发现报错 203,原因是因为文件权限不足需要提升文件权限
解决方式:
chmod 755 xxx.jar
2. main process exited, code=exited, status=203/EXEC,问题原因是jar不是可执行的
解决方式:
pom里加
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<finalName>${project.artifactId}</finalName>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>