部署使用Systemctl启动项目
假设我们的项目名称叫productName,我们希望使用systemctl start productName命令来启动我们的项目,那么我们需要从以下几个步骤来配置系统。
1.配置service文件
在项目的/usr/lib/systemd/system目录下新建一个文件,名为:
productName.service在里面的内容添加:
[Unit]
Description=service for productName
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/data/product/start.sh
ExecStop=/data/product/stop.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
以下是配置内容介绍:
[Unit] #主要是服务说明
Description=service for productName #简单的服务介绍
After=syslog.target network.target remote-fs.target nss-lookup.target #描述服务类别,表示服务需要在syslog,network,remote,nss-lookup几个服务启动后才能启动
#这里还可以加Before=xxx.service 表示在xxx服务之前启动
[Service] #核心区域
Type=forking #表示后台运行模式
//项目启动文件路径
Restart=no #定义服务进程退出后systemd的重启方式,默认不重启
ExecStart=/data/product/start.sh #启动服务命令,值为启动文件
ExecStop=/data/product/stop.sh #关闭服务命令,值为关闭服务文件
PrivateTmp=true #表示给服务分配独立的临时空间
[Install]
WantedBy=multi-user.target #多用户
Type属性的值有:
值 | 描述 |
---|---|
simple | 是默认值,代表以Execstart字段启动的进程为主进程 |
forking | Execstart字段以fox()方式启动,此时父进程退出,子进程将成为后台运行的主进程,一般使用这个值 |
oneshot | 类似于simple,但只执行一次,systemd会等这个执行完才执行其它服务 |
dbus | 类似于simple,但会等获得D-Bus信号后启动 |
notify | 类似于simple,但结束后会发出通知消息,然后才启动其它服务 |
idle | 类似于simple,但要等其它服务启动完才启动本服务 |
Restart属性的值有:
值 | 描述 |
---|---|
no | 默认值,退出后无操作 |
on-success | 只有正常退出,退出状态为0,才会重启 |
on-failure | 非正常退出时重启,包括信号终止或超时 |
on-abnaomal | 只有信号终止或超时才会重启 |
on-abort | 只有在没有捕捉到信号终止时才会重启 |
on-watchdog | 超时退出时才会重启 |
always | 不管什么原因都会重启 |
Exec*后面执行的命令有很多,列表
命令 | 描述 |
---|---|
ExecStart | 启动服务时执行的命令 |
ExecReload | 重启服务时执行的命令 |
ExecStop | 停止服务时执行的命令 |
ExecStartPre | 启动服务前执行的命令 |
ExecStartPost | 启动服务后执行的命令 |
ExecStopPost | 停止服务后执行的命令 |
2.配置项目启动文件
由以上配置我们可以看出启动文件路径在/data/product/下,最好能够把项目包也放在该位置
先添加启动文件start.sh,内容添加为:
#!/bin/sh
export JAVA_HOME=/usr/java/jdk1.8.0_231
export PATH=$JAVA_HOME/bin:$PATH
nohup java -jar -Dspring.profiles.active=outernet -Dspring.config.location=/data/product/application-outernet.yml /data/product/productName-0.0.1-SNAPSHOT.jar > /data/product/productName.log &
echo $! > /data/product/productName.pid
然后添加停止文件stop.sh,内容添加为:
#!/bin/sh
kill -9 `cat /data/product/productName.pid`
在linux系统中挂载磁盘方式:
mount –t nfs 127.0.0.1:/ceshi /home/test –o vers=3
mount是挂载命令
参数选项:
-t:
vfstype指定文件系统的类型,通常不必指定。mount会自动选择正确的类型。常用类型有:
值 | 代表类型 |
---|---|
iso9660 | 光盘或者光盘镜像 |
msdos | DOS fat16文件系统 |
vfat | Windows 9x fat32文件系统 |
ntfs | Windows NT ntfs文件系统 |
smbfs | Windows文件网络共享 |
nfs | UNIX(LINUX)文件网络共享 |
由此可以看出示例命令挂载的linux网络共享文件
-o:
options主要用来描述设备或档案的挂载方式
值 | 含义 |
---|---|
loop | 用来把一个文件当成硬盘分区挂载到系统 |
ro | 采用只读当时挂载设备 |
rw | 采用读写方式挂载设备 |
iocharset | 指定访问文件系用所用字符集 |
设置linux开机自动执行方法
很简单,linux开机会在login之前自动执行rc.local脚本
我们只需要把需要开机自启动的命令加入rc.local文件的底部既可
常用设备:centos系统在/etc/rc.d/rc.local
ubuntu系统在/etc/init.d/rc.local