Centos 配置服务开机自启
in 默认分类 with 0 comment

Centos 配置服务开机自启

in 默认分类 with 0 comment

配置服务

以redis为例子

创建服务文件

vim /usr/lib/systemd/system/redis.service

将下面的内容写入文件

#表示基础信息
[Unit]
#描述
Description=Redis
#在哪个服务之后启动
After=syslog.target network.target remote-fs.target nss-lookup.target

#表示服务信息
[Service]
Type=forking
#注意:需要和redis.conf配置文件中的信息一致
PIDFile=/var/run/redis_6379.pid
#启动服务的命令
#redis-server安装的路径 和 redis.conf配置文件的路径
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
#重新加载命令
ExecReload=/bin/kill -s HUP $MAINPID
#停止服务的命令
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

#安装相关信息
[Install]
#以哪种方式启动
WantedBy=multi-user.target
#multi-user.target表明当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行。

JAVA程序

创建启动脚本

vim /usr/local/server/web/wbs-service-start.sh

填入以下内容

#!/bin/sh

# 加载java环境,这里填jdk的根路径
export JAVA_HOME=/usr/java/jdk
export PATH=$JAVA_HOME/bin:$PATH
# 启动命令
nohup java -jar /usr/local/server/web/wbs-service.jar > /dev/null  2>&1 &
# 输出pid到文件
echo $! > /var/run/wbs-service.pid

赋予权限

chmod +x /usr/local/server/web/wbs-service-start.sh

创建服务文件

vim /usr/lib/systemd/system/wbs-service.service

填入以下内容

#表示基础信息
[Unit]
#描述
Description=Web
#在哪个服务之后启动
After=syslog.target network.target remote-fs.target nss-lookup.target

#表示服务信息
[Service]
Type=forking
#启动脚本里pid文件路径
PIDFile=/var/run/wbs-service.pid
#启动服务的命令
ExecStart=/usr/local/server/web/wbs-service-start.sh
#重新加载命令
ExecReload=/bin/kill -s HUP $MAINPID
#停止服务的命令
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

#安装相关信息
[Install]
#以哪种方式启动
WantedBy=multi-user.target

服务使用

以redis为例

保存后退出,执行systemctl daemon-reload命令,使配置生效。生效后可使用下面几个命令来控制redis服务:

设置开机启动:systemctl enable redis.service
检测是否开机自启:systemctl is-enabled redis.service
取消开机自启:systemctl disable redis.service
启动:systemctl start redis.service
停止:systemctl stop redis.service
重启:systemctl restart redis.service
查看状态:systemctl status redis.service

服务依赖

有时候程序启动需要依赖其他程序,例如Java程序依赖MySQL时,如果都设置为开机自启可能会导致Java程序比MySQL更早启动,这个时候需要延迟Java程序的启动。

sleep

启动程序前,先睡眠指定时间等待,在wbs-service-start.sh文件启动命令前加上

sleep 10s

等待10秒后再启动Java程序

wait-for-it

上面的方法是写死的等待时长,如果MySQL启动时间超过了10秒就会很尴尬,可以用这个脚本:wait-for-it

这个脚本会一直循环的检测目标主机的端口,直到端口能够访问,此时意味着服务已经成功启动,再执行Java启动命令就可以了。
用法:

wait-for-it.sh host:port [-s] [-t timeout] [-- command args]
-h HOST | --host=HOST       Host or IP under test
-p PORT | --port=PORT       TCP port under test
                            Alternatively, you specify the host and port as host:port
-s | --strict               Only execute subcommand if the test succeeds
-q | --quiet                Don't output any status messages
-t TIMEOUT | --timeout=TIMEOUT
                            Timeout in seconds, zero for no timeout
-- COMMAND ARGS             Execute command with args after the test finishes

例子:

./wait-for-it.sh www.google.com:80 -- echo "google is up"
Responses