继续上一篇
做天做完rpm还是没有解决掉在国产服务器开机启动的问题,今日继续
1、需要增加sysytem 的 项目.serivice 文件
2、修改打包路径下的/root/rpmbuild/SPECS/***.spec 打包配置文件
3、重新打包构建,安装
4、设置开机启动 systemctl enable 项目.serivice
一、创建runyydy.serivice systemd 管理文件
1、创建文件
vim /root/rpmbuild/SOURCES/runyydy.serivice
[Unit]
Description=yiyuduoyi
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/data/yiyuduoyi_sh
ExecStart=/usr/java/jdk1.8.0_261-amd64/bin/java -Xms2048m -Xmx2048m -XX:PermSize=1024M -XX:MaxPermSize=1024M -jar /data/***/run.jar --server.port=8080 > /data/***/temp.txt &
Restart=on-abort
ExecStop=/data/yiyuduoyi_sh/***stop.sh
[Install]
WantedBy=multi-user.target
保存 :wq!
2、创建 ***stop.sh 用于stop 需要根据个人来配置
vim /root/rpmbuild/SOURCES/***stop.sh
#!/bin/sh
pid=sudo netstat -anp|grep 8080|awk '{print $7}'|awk -F "/" '{print $1}'
echo $pid
if [ -z $pid ];then
echo "***-null 无启动端口8080"
else
echo "***-kill 端口8080"
kill -9 $pid
fi
保存 :wq!
二、修改 /root/rpmbuild/SPECS/***.spec 打包配置文件
#项目名称
Name:runyydy
#项目版本号
Version:1.0
#项目版本号-release号
Release:1%{?dist}
#项目描述
Summary:yiyuduoyi jar 打包 rpm
#项目组名
Group:yiyuduoyi
#License:默认GPL
License:GPL
#来规避掉二进制文件带来的依赖L
AutoReqProv: no
#源文件,需要打包到rpm的几个文件可以列几个,目前三个文件
Source0:***.jar
Source1:***.service
Source2:***stop.sh
#rpm软件包所依赖的软件包名称,可以使用>=或者<=表示大于或者小于某一特定版本。
Requires: shadow-utils,bash
#rpm软件包构建过程中所依赖的软件包名称,可以使用>=或者<=表示大于或者小于某一特定版本。
BuildRequires:systemd
%{?systemd_requires}
#介绍说明
%description
****服务程序***
#安装操作,建立了两个虚拟目录app_dir,service_dir %{buildroot}宏定义可以通过 rpm --eval "%{buildroot}" 查看路径
%install
app_dir=%{buildroot}/data/yiyuduoyi_sh
service_dir=%{buildroot}%{_unitdir}
rm -rf %{buildroot}
mkdir -p %{buildroot}
mkdir -p $app_dir
mkdir -p $service_dir
# 目录建立后拷贝需要打包的文件到对应目录 service文件拷贝到系统的/usr/lib/systemd/system 下
cp %{SOURCE0} $app_dir/runyydy.jar
cp %{SOURCE1} $service_dir
cp %{SOURCE2} $app_dir/runyydystop.sh
# 文件属性权限设置 *** 是自己的项目名称
%files
# define default file attributes
%defattr(-,root,root,755)
#表示将dir目录路径下的内容打进rpm软件包里。
%dir %attr(755, root, root) /data/y****h
#控制文件权限
%attr(755, root, root) /data/y****h/***.jar
%attr(755, root, root) /data/y****h/***stop.sh
%attr(775, root, root) /usr/lib/systemd/system/%{name}.service
# rpm软件包安装之后执行的脚本 检测service文件
%post
# ensure Spring Starter service is enabled and running
%systemd_post %{name}.service
%{_bindir}/systemctl enable %{name}.service
%{_bindir}/systemctl start %{name}.service
# 卸载前触发
%preun
%systemd_preun %{name}.service
# 卸载后执行,删除文件目录
%postun
case "$1" in
0) # This is a package remove 杀死进程,再删除文件
pid=`sudo netstat -anp|grep 8080|awk '{print $7}'|awk -F "/" '{print $1}'`
echo $pid
if [ -z $pid ];then
echo "***-null 无启动端口8080"
else
echo "***-kill 端口8080"
kill -9 $pid
fi
# remove app folders
rm -rf /data/**
;;
1) # This is a package upgrade
# do nothing
;;
esac
# 如果升级需要重启
%systemd_postun_with_restart %{name}.service
保存 :wq!
三、重新打包构建,安装
1、查看打包的源目录文件
[root@localhost rpmbuild]# ll SOURCES/
总用量 113900
-rw-r--r-- 1 root root 116623778 12月 20 16:38 ***.jar
-rw-r--r-- 1 root root 424 12月 20 17:36 ***.service
-rw-r--r-- 1 root root 208 12月 20 16:38 ***stop.sh
2、重新构建
cd /root/rpmbuild
dos2unix SPECS/***.spec //对spec 改变文件中\r 为\n
rpmbuild -ba SPECS/***.spec
3、安装
查看生成的rpm包
cd /root/rpmbuild/
查看rpm包内目录:
rpm -qpl RPMS/x86_64/****-1.0-1.el7.centos.x86_64.rpm
rpm -ivh RPMS/x86_64/****-1.0-1.el7.centos.x86_64.rpm
四、设置开机启动 systemctl enable 项目.serivice
1、启动service
systemctl start ***.service //查看程序端口是否成功
查看状态
systemctl status ***.service
输入命令:netstat -tlnp 查看配置的程序端口是否正常 OK
systemctl stop ***.service
输入命令:netstat -tlnp 查看配置的程序端口是否杀死 OK
提醒:在这里一定要检测 service文件的是否有写错的地方,之前因为一个字母一直不成功折腾很久哇
2、加入开机启动
输入:
systemctl enable ***.service
重启服务器:
reboot
等待……
输入命令:netstat -tlnp 查看配置的程序端口是否正常 OK
完成!
拷贝文件到国产加密服务器,进行安装,systemctl start ***.service 启动
查看,OK systemctl enable ***.service 设置开机启动,重启 查看端口程序正常,OK。
(这里又有一个问题,就是在本地写的***.jar文件名不同,无法正常启动,修改service 加密服务器不允许修改,只能到本地修改好后重新打包rpm 再次安装,才OK ,麻烦。大家也要注意啊)
注意事项:
1、rpm本身就是把文件打包到rpm,rpm 安装就是根据spec文件来进行,拷贝文件到相应位置,然后根据spec文件进行命令执行等操作,所以spec文件很重要
2、本人之前使用的是一个sh文件进行jar文件启动,但是写道service中 ExecStart= /data/***.sh 启动一直报错,这里改为现有的配置直接启动jar命令才可以
3、service设置enable开机启动时,一直报错Failed to execute operation: Invalid argument。发现service文件中
[Install]
WantedBy=multi-user.targe
少了一个字母t 总是无法设置成功,改后,就好了
[Install]
WantedBy=multi-user.target
4、就是要细心