如果我们的系统没有部署成系统服务,那么当客户的机器意外宕机的时候,我们的应用程序需要手动开启,需要我们自己去维护,显得十分麻烦。
linux部署
在linux系统上部署系统服务时,我们需要知道linux系统的运行级别,也就是在操作系统启动的时候,运行我们的脚本,达到服务开机自启的功能。
linux运行级别
系统启动的时候,会有运行级别,会先运行对应级别的rc.d(如rc0.d,rc1.d),最后再运行rc.lcoal文件。
#1,单用户。
#2-5是多用户。
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
使用Systemd配置系统服务
Systemd 是 linux系统工具,可以用来启动和管理守护进程,已成为大多数发行版本的标准配置。而systemctl则是其中一个管理系统的命令,这里我们使用了systemctl来管理系统服务。系统服务的位置在于/usr/lib/systemd/system。centos7系统下需要使用ini.d目录进行配置自启动服务。
制作nginx系统服务
使用yum安装nginx
yum install -y nginx
查看nginx服务
systemctl --type=service|grep nginx
启动nginx服务
systemctl start nginx.service
设置nginx服务开启自启动 ```shell systemctl enable nginx.service
取消开机自启动
systemctl disable nginx.service
<a name="hGR3K"></a>
####
这里需要注意的是,如果没有用yum安装,并且还想使用systemctl来管理服务,那么需要自己弄一个nginx.service文件,然后放入/usr/lib/systemd/system目录。然后需要注意的是替换文件中nginx的安装目录。
```shell
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true
[Install]
WantedBy=multi-user.target
制作tomcat系统服务
制作tomcat系统服务的时候需要注意,在tomcat安装目录下的bin目录,创建setenv.sh文件,在其中指定tomcat进程的pid。
CATALINA_PID="$CATALINA_BASE/tomcat.pid"
tomcat服务的内容:
/usr/lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat
After=syslog.targetnetwork.target remote-fs.target nss-lookup.target
[Service]
Type=forking
Environment="JAVA_HOME=/root/文档/jdk1.8.0_181"
PIDFile=/home/ourway/apache-tomcat-7.0.90/tomcat.pid
ExecStart=/home/ourway/apache-tomcat-7.0.90/bin/startup.sh
ExecStop=/home/ourway/apache-tomcat-7.0.90/bin/shutdown.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
制作java程序系统服务
这些脚本都需要有可执行权限,并且将service文件放入/usr/lib/systemd/system目录。
- 编写启动脚本
#!/bin/sh
export JAVA_HOME=/usr/java/jdk
export PATH=$JAVA_HOME/bin:$PATH
cd /usr/java
nohup java -jar wbs-service.jar > /dev/null 2>&1 &
echo $! > wbs-service.pid
- 编写关闭脚本
#!/bin/sh
PID=$(cat /var/run/wbs-service.pid)
kill -9 $PID
[Unit]
Description=wbs-service
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/wbs-service-start.sh
ExecStop=/usr/wbs-service-stop.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
4. 启动java程序服务
```shell
systemctl start wbs-service
- 设置nginx服务开启自启动 ```shell systemctl enable wbs-service
取消开机自启动
systemctl disable wbs-service
<a name="hKf7P"></a>
####
<a name="53c0q"></a>
### 使用init.d和chkconfig配置系统服务
chkconfig可以帮助我们快速的管理系统服务。centos6系统下需要使用ini.d目录进行配置自启动服务。
```shell
# 第一个运行级别参数
# 第二个是启动优先级
# 第三个是关闭优先级
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
# It has a lot of features, but it's not for everyone.
制作nginx系统服务
#!/bin/bash
#nx Startup script for the Nginx HTTP Server
# it is v.0.0.2 version.
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
# It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/var/run/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
echo "nginx already running...."
exit 1
fi
echo -n $"Starting $prog: "
daemon $nginxd -c ${nginx_config}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
return $RETVAL
}
# Stop nginx daemons functions.
stop() {
echo -n $"Stopping $prog: "
killproc $nginxd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid
}
# reload nginx service functions.
reload() {
echo -n $"Reloading $prog: "
#kill -HUP `cat ${nginx_pid}`
killproc $nginxd -HUP
RETVAL=$?
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|reload|status|help}"
exit 1
esac
exit $RETVAL
制作tomcat系统服务
- 复制tomcat目录下的catalina.sh文件到/etc/init.d/目录下面,并重命名为tomcat
在脚本的开头 加上chkconfig配置
#chkconfig:2345 10 90 #description:Tomcat service
在脚本中设置环境变量
CATALINA_HOME=/usr/java/tomcat JAVA_HOME=/usr/java/jdk8
给予脚本可执行权限
chmod 755 /etc/init.d/tomcat
启动服务
service tomcat start
6.设置成开机自启动
chkconfig tomcat on
制作java程序系统服务
制作启动脚本start.sh
nohup java -jar dceApi-0.0.1-SNAPSHOT.jar > /dev/null 2>&1 &
制作服务文件
这里的启动顺序10
#chkconfig:2345 10 90
#description:${serviceName} service
export JAVA_HOME=/opt/jdk8
export PATH=$JAVA_HOME/bin/:$PATH
sh {$yourdir}/start.sh
windows部署
windows下设置系统服务则比较方便。
使用nssm工具
- 进入nssm.exe所在路径,执行下图所示命令 ```java //service-name,具体的服务名 //node.exe,具体可执行文件,注意要绝对路径 nssm install service-name d://node.exe d://app.js
//手动选择执行的exe和输入参数 nssm install service-name
2. 启动服务
```shell
nssm start service-name
停止服务
nssm stop service-name
卸载服务
nssm remove service-name confirm
编辑服务
nssm edit service-name