Linux 自定义服务

Linux 自定义服务 #

2021-06-08 00:18

晚上抽空学了下在Linux 服务器中自定义service,自定义之后,启动、停止、开机自启动等操作就简单多了。

我们以tomcat 作为我们的例子,目标是将tomcat 自定义为service,并实现开机自启动。

准备工作 #

  1. 系统版本 CentOS 7.x
  2. 配置好JDK,下载Tomcat,并找个目录解压
  3. 执行下Tomcat bin目录下的startup.sh,shutdow.sh 命令,确认环境是否正确

Show Time #

首先,在目录/usr/lib/systemd/system 中创建一个service文 件:tomcat.service,内容如下:

[Unit]
Description=apache tomcat service

[Service]
Type=simple
ExecStart=/usr/local/tomcat/apache-tomcat-10.0.6/bin/auto_startup.sh
ExecStop=/usr/local/tomcat/apache-tomcat-10.0.6/bin/auto_shutdown.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Service 文件中各个节点的含义就不深入讲了(笔者也还只是懂些皮毛),说下两点要注意的。

  1. 没有直接使用Tomcat bin目录下的startup.sh,shutdow.sh 命令,因为会提示JAVA_HOME,JRE_HOME 找不到,所以自定义了两个sh文件,内容如下:

    #!/bin/sh
    source /etc/profile
    /usr/local/tomcat/apache-tomcat-10.0.6/bin/startup.sh
    
    #!/bin/sh
    source /etc/profile
    /usr/local/tomcat/apache-tomcat-10.0.6/bin/shutdown.sh
    

    增加了source /etc/profile,先加载了Java的环境变量。

    某些时候,还会提示配置文件找不到(如果类中有根据相对路径来查找文件的代码的话),导致Tomcat 启动失败。那我们可以这样来写启动脚本:

    #!/bin/sh
    source /etc/profile
    cd /usr/local/tomcat/apache-tomcat-10.0.6/bin 
    ./startup.sh
    
  2. 注意RemainAfterExit=yes,未增加该配置之前,执行systemctl start tomcat.service总是执行完start之后,立刻又执行stop。

接着,见证奇迹的时刻了。

systemctl start tomcat.service,可以发现Tomcat启动了。

systemctl enable tomcat.service,重启服务器,发现Tomcat 自启动了。

Enjoy it :-)

P.S. 服务相关的一些命令,作为备忘

# 启动
systemctl start tomcat.service
# 停止
systemctl stop tomcat.service
# 开机自启动
systemctl enable tomcat.service
# 取消开机自启动
systemctl disable tomcat.service
# 查看systemctl 的日志
journalctl -u tomcat.service
# 修改了tomcat.service,需要重载文件
systemctl daemon-reload
# 查看系统自启动的服务
systemctl list-unit-files|grep enabled