1.存放服务的目录:/etc/init.d
2.服务脚本(project):
#! /bin/sh
# /etc/init.d/project
# starts the ProjectManagerService service
### BEGIN INIT INFO
# Provides: project
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive: true
# Short-Description: Start/stop project application server
### END INIT INFO
JAVA_HOME=/usr/lib/jvm/jdk1.8
JRE_HOME=/usr/lib/jvm/jdk1.8/jre
ROOT_PATH=/usr/local/keydak/project
SERVICE_NAME=project
PATH_TO_JAR=$ROOT_PATH/ProjectManagerService.jar
PID_PATH_NAME=/tmp/$SERVICE_NAME-pid
#JAVA_OPTS="-Xms384M -Xmx384M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/oom -XX:+PrintGCDetails -Djava.rmi.server.hostname=192.168.62.125 -Dcom.sun.management.jmxremote.port=17011 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=*:7021"
JAVA_OPTS="-Xms512M -Xmx512M"
case $1 in
start)
echo "Starting $SERVICE_NAME ..."
if [ ! -f $PID_PATH_NAME ]; then
sudo java -jar $JAVA_OPTS $PATH_TO_JAR --spring.profiles.active=prod /tmp 2>> /dev/null >> /dev/null &
echo $! > $PID_PATH_NAME
echo "$SERVICE_NAME started ..."
else
echo "$SERVICE_NAME is already running ..."
fi
;;
stop)
if [ -f $PID_PATH_NAME ]; then
PID=$(cat $PID_PATH_NAME);
echo "$SERVICE_NAME stoping ..."
sudo kill $PID;
echo "$SERVICE_NAME stopped ..."
sudo rm $PID_PATH_NAME
else
echo "$SERVICE_NAME is not running ..."
fi
;;
restart)
if [ -f $PID_PATH_NAME ]; then
PID=$(cat $PID_PATH_NAME);
echo "$SERVICE_NAME stopping ...";
sudo kill $PID;
echo "$SERVICE_NAME stopped ...";
sudo rm $PID_PATH_NAME
echo "$SERVICE_NAME starting ..."
sudo java -jar $JAVA_OPTS $PATH_TO_JAR --spring.profiles.active=prod /tmp 2>> /dev/null >> /dev/null &
echo $! > $PID_PATH_NAME
echo "$SERVICE_NAME started ..."
else
echo "$SERVICE_NAME is not running ..."
fi
;;
esac
脚本头部
#! /bin/sh
# /etc/init.d/project
# starts the ProjectManagerService service
#! /bin/sh
:指定脚本使用的解释器。- 注释部分描述了脚本的功能和位置。
INIT INFO 部分
### BEGIN INIT INFO
# Provides: project
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive: true
# Short-Description: Start/stop project application server
### END INIT INFO
Provides
:提供的服务名称。Required-Start
和Required-Stop
:服务启动和停止时所需的其他服务。Default-Start
和Default-Stop
:服务在这些运行级别下自动启动或停止。X-Interactive
:指示服务在启动或停止时是否可以交互。Short-Description
:服务的简短描述。
变量定义
JAVA_HOME=/usr/lib/jvm/jdk1.8
JRE_HOME=/usr/lib/jvm/jdk1.8/jre
ROOT_PATH=/usr/local/keydak/project
SERVICE_NAME=project
PATH_TO_JAR=$ROOT_PATH/ProjectManagerService.jar
PID_PATH_NAME=/tmp/$SERVICE_NAME-pid
JAVA_HOME
和JRE_HOME
:指定 Java 开发工具包和运行时环境的路径。ROOT_PATH
:项目的根目录。SERVICE_NAME
:服务的名称。PATH_TO_JAR
:指向 JAR 文件的路径。PID_PATH_NAME
:存储服务进程 ID 的文件路径。
Java 启动选项
JAVA_OPTS="-Xms512M -Xmx512M"
JAVA_OPTS
:设置 Java 虚拟机的内存选项,最小和最大堆内存均为 512MB。
服务管理逻辑
case $1 in
start)
# 启动服务逻辑
;;
stop)
# 停止服务逻辑
;;
restart)
# 重启服务逻辑
;;
esac
- 使用
case
语句处理启动、停止和重启命令。
启动服务 (start
)
if [ ! -f $PID_PATH_NAME ]; then
sudo java -jar $JAVA_OPTS $PATH_TO_JAR --spring.profiles.active=prod /tmp 2>> /dev/null >> /dev/null &
echo $! > $PID_PATH_NAME
echo "$SERVICE_NAME started ..."
else
echo "$SERVICE_NAME is already running ..."
fi
- 检查 PID 文件是否存在,如果不存在,则启动服务。
- 使用
sudo
执行 Java 命令,重定向错误和输出到/dev/null
。 - 将进程 ID 写入 PID 文件。
停止服务 (stop
)
if [ -f $PID_PATH_NAME ]; then
PID=$(cat $PID_PATH_NAME);
echo "$SERVICE_NAME stoping ..."
sudo kill $PID;
echo "$SERVICE_NAME stopped ..."
sudo rm $PID_PATH_NAME
else
echo "$SERVICE_NAME is not running ..."
fi
- 检查 PID 文件是否存在,如果存在,则读取 PID 并停止服务。
重启服务 (restart
)
if [ -f $PID_PATH_NAME ]; then
PID=$(cat $PID_PATH_NAME);
echo "$SERVICE_NAME stopping ...";
sudo kill $PID;
echo "$SERVICE_NAME stopped ...";
sudo rm $PID_PATH_NAME
echo "$SERVICE_NAME starting ..."
sudo java -jar $JAVA_OPTS $PATH_TO_JAR --spring.profiles.active=prod /tmp 2>> /dev/null >> /dev/null &
echo $! > $PID_PATH_NAME
echo "$SERVICE_NAME started ..."
else
echo "$SERVICE_NAME is not running ..."
fi
赋予脚本权限:
sudo chmod -R 777 /etc/init.d/project
移除服务系统自启
update-rc.d -f 服务名 remove
添加服务系统自启
update-rc.d 服务名 defaults
刷新系统服务修改
sudo systemctl daemon-reload
服务启动:
sudo service project start
服务停止
sudo service project stop
服务重启
sudo service project restart
检验nginx配置文件命令(校验nginx文件是否正确):
sudo nginx -t
pi@debian11:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
pi@debian11:~$
出现上面内容说明 Nginx 配置文件语法是正确的,并且测试成功,可执行下方命令
重新加载 Nginx:
sudo systemctl reload nginx
启动 Nginx 服务:
sudo systemctl start nginx
检查 Nginx 服务的状态:
sudo systemctl status nginx