Linux开启自启服务/脚本+自定义Service

Linux开启自启服务/脚本+自定义Service

Scroll Down

前言

ECS虽然不会频繁的重启,但是为了避免每次重启都需要手动start服务,写个开机自启脚本就很有必要了。同时为项目做一个Service,启停也会更加的方便.

开机启动服务/脚本

添加开机自启服务

在CentOS 7中添加开机自启服务非常方便,只需要两条命令(以nginx为例),所以我们可以将很多常用的服务写成service,方便于控制.

#.service可加可不加
systemctl enable nginx.service  #设置nginx服务为自启动服务
systemctl start nginx.service  #启动nginx服务

添加开机自启脚本

在centos7中增加脚本有两种常用的方法,以脚本beyond.sh为例

#!/bin/bash
#description:开机自启脚本
/usr/local/tomcat/bin/startup.sh  #启动tomcat

方法一

 #赋予脚本可执行权限
chmod +x /root/beyond.sh x

#打开/etc/rc.d/rc.local或/etc/rc.local文件,在末尾增加如下内容
#注意自己脚本的路径
su - user -c '/root/beyond.sh'

#在centos7中,/etc/rc.d/rc.local的权限被降低了,所以需要执行如下命令赋予其可执行权限
chmod +x /etc/rc.d/rc.local

方法二

#将脚本移动到/etc/rc.d/init.d目录下
mv /root/Beyond.sh /etc/rc.d/init.d

#增加脚本的可执行权限
chmod +x /etc/rc.d/init.d/beyond.sh

#添加脚本到开机自动启动项目中
cd /etc/rc.d/init.d
chkconfig --add beyond.sh
chkconfig beyond.sh on

自定义服务文件,添加到系统服务,通过Systemctl管理

将项目打包成一个jar到服务器以java -jar方式运行的时候,如果我们关闭了ssh连接,那么项目也将被关闭。要想让项目处于一直运行的状态、开机自启、快捷启停的话,一个很好的办法就是将它注册成一个服务.

1.写服务文件

注意,文件保存在/etc/systemd/system/目录下或者/usr/lib/systemd/system目录下

[Unit]:服务的说明
Description:描述服务
After:描述服务类别

[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间

#注意:启动、重启、停止命令全部要求使用绝对路径

[Install]服务安装的相关设置,可设置为多用户

示例:
位于/usr/lib/systemd/system目录下的nginx.service

[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

SpringBoot项目作为jar包启动的服务示例:

[Unit]
Description=rbac Service
Documentation=http://justlei.cn
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/java -server -Xms256m -Xmx256m -jar /root/monday-0.0.1-SNAPSHOT.jar
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandOutput=syslog

StandError=inherit

[Install]
WantedBy=multi-user.target

参数:

  • Xms256m:为 JVM 启动时分配的内存,请按照服务器的内存做适当调整,512 M 内存的服务器推荐设置为 128,1G 内存的服务器推荐设置为 256,默认为 256。
  • Xmx256m:为 JVM 运行过程中分配的最大内存,配置同上。
  • YOUR_JAR_PATH:jar包的绝对路径,如/root/monday-0.0.1-SNAPSHOT.jar

之后,便可使用service的文件名来做为名称控制服务的状态

# 修改 service 文件之后需要刷新 Systemd
sudo systemctl daemon-reload

# 使 rbac 开机自启
sudo systemctl enable rbac

# 启动 rbac
sudo service rbac start
#systemctl start rbac.service

# 重启 rbac
sudo service rbac restart
#systemctl restart rbac.service

# 停止 rbac
sudo service rbac stop
#systemctl stop rbac.service

# 查看 rbac 的运行状态
sudo service rbac status
##systemctl status rbac.service

#查看所有已启动的服务
systemctl list-units --type=service

值得一提的是,我在之前存放于/etc/rc.d/init.d目录下的开机自启脚本也自动被注册成了一个服务。