linux · 2021年7月21日 0

Centos7使用systemd管理自定义服务


本文简单讲解如何在centos7中使用systemd管理自定义服务,仅供学习与交流,请勿用于商业用途。

centos6中,在/etc/rc.local添加自定义可执行脚本,将会在用户登录之后执行
例如,启动编译安装的redis

echo "/usr/local/redis/bin/redis-server" >> /etc/rc.local

centos7以及之后版本,提供了systemd服务,可以方便的管理各种服务。

而/etc/rc.d/rc.local该文件权限已经被降低,去掉了执行权限,默认无法使用,详细如下。看不懂英语的童鞋请自行使用翻译软件。

#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local

添加服务到systemd中管理

把编译安装的redis加入到systemd管理内

在/lib/systemd/system目录下创建一个文件redis.service,内容如下

[Unit]
Description=Advanced key-value store
After=network.target

[Service]
ExecStart=/usr/local/bin/redis-server /usr/local/redis/etc/redis.conf &
ExecStop=/bin/kill -s TERM $MAINPID
PIDFile=/var/run/redis-server.pid

[Install]
WantedBy=multi-user.target
  • [Unit] 表示这是基础信息
    • Description 是描述,随便写
    • After 是在那个服务后面启动,需要网络的服务就需要在network.target启动后启动
  • [Service] 表示这里是服务信息
    • ExecStart 是启动服务的命令
    • ExecStop 是停止服务的命令
    • PIDFile 守护进程的PID文件,必须是绝对路径
  • [Install] 表示这是是安装相关信息
    • WantedBy 是以哪种方式启动

刷新配置

systemd重新读取刚刚配置的服务

systemctl daemon-reload

添加redis到开机自启

[root@redis-server ~]# systemctl enable redis.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service.

查看redis状态

[root@redis-server ~]# systemctl status redis.service 
¡ñ redis.service - Advanced key-value store
   Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2020-04-03 12:21:39 EDT; 10s ago
 Main PID: 22942 (redis-server)
   CGroup: /system.slice/redis.service
           ©¸©¤22942 /usr/local/bin/redis-server 127.0.0.1:6379
.....