配置服务
以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"
本文由 visionki 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Feb 10, 2022 at 09:32 am