前言
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目录下的开机自启脚本也自动被注册成了一个服务。
Q.E.D.