自定义的 systemd 服务启动方式

目录

systemd 单元文件(Unit File)

单元文件结构

示例单元文件

1. 基础单元文件

2. 带有环境变量的单元文件

3. 自定义的 ExecStartPre 和 ExecStartPost

配置管理

日志管理

1. 系统日志:

2. 应用程序日志:

3. 用户日志:

使用prometheus配置实例

1. 配置prometheus

2. 配置alertmanager

3. 配置node_exporter 

4. 配置prometheus-webhook-dingtalk


在大多数 Linux 发行版中,用户自定义的 systemd 服务单元文件通常放在 /etc/systemd/system/ 目录下,而系统提供的服务单元文件通常放在 /usr/lib/systemd/system/

systemd 是现代 Linux 系统上广泛使用的初始化系统和服务管理器。使用 systemd 配置和管理服务非常高效。以下是 systemd 启动方式配置的基本介绍和示例:

systemd 单元文件(Unit File)

systemd 使用单元文件来定义服务、套接字、设备等。单元文件通常位于以下目录:

  • /etc/systemd/system/ - 用户自定义的单元文件
  • /lib/systemd/system//usr/lib/systemd/system/ - 系统包提供的单元文件

单元文件结构

一个单元文件包含以下几个部分:

  1. [Unit]:描述单元的基本信息和依赖关系。
  2. [Service]:定义服务的行为。
  3. [Install]:指定服务的启动和停止条件。

示例单元文件

1. 基础单元文件

这是一个简单的服务单元文件示例,配置了 my_service 服务:

[Unit]
Description=My Custom Service
After=network.target

[Service]
ExecStart=/usr/bin/my_service
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target
  • [Unit]

    • Description: 服务的描述。
    • After: 指定服务的启动顺序,network.target 表示服务在网络配置之后启动。
  • [Service]

    • ExecStart: 启动服务的命令。
    • ExecReload: 重载服务的命令。
    • Restart: 服务失败时的重启策略,例如 on-failure 表示失败时重启。
  • [Install]

    • WantedBy: 指定服务应在什么目标(target)下启动,multi-user.target 表示在多用户模式下启动。
2. 带有环境变量的单元文件

如果需要设置环境变量,可以使用 EnvironmentFileEnvironment 指令:

[Unit]
Description=My Service with Environment Variables
After=network.target

[Service]
ExecStart=/usr/bin/my_service
EnvironmentFile=/etc/my_service/my_service.env
Restart=on-failure

[Install]
WantedBy=multi-user.target

  • EnvironmentFile: 从指定文件加载环境变量。
3. 自定义的 ExecStartPre 和 ExecStartPost

可以在服务启动前或启动后执行其他命令:

[Unit]
Description=My Service with Pre and Post Commands
After=network.target

[Service]
ExecStartPre=/usr/bin/pre_start_command
ExecStart=/usr/bin/my_service
ExecStartPost=/usr/bin/post_start_command
Restart=on-failure

[Install]
WantedBy=multi-user.target

  • ExecStartPre: 启动服务之前执行的命令。
  • ExecStartPost: 启动服务之后执行的命令。

配置管理

  1. 重新加载配置

    在修改单元文件后,需要重新加载 systemd 配置:

    sudo systemctl daemon-reload
    

  2. 启动和停止服务

    启动、停止和重启服务的命令:

    sudo systemctl start my_service
    sudo systemctl stop my_service
    sudo systemctl restart my_service
    

  3. 启用和禁用服务

    启用服务以便在系统启动时自动启动:

    sudo systemctl enable my_service
    

    禁用服务以防止自动启动:

    sudo systemctl disable my_service
    

  4. 检查服务状态

    查看服务的当前状态:

    sudo systemctl status my_service
    

日志管理

使用 journalctl 查看服务日志:

sudo journalctl -u my_service

如果 systemd-journald 未配置为持久存储,日志会存储在内存中。日志文件位于: 

/run/log/journal/
#这个目录是临时的,每次系统重启后内容都会丢失。 

一些常见的日志文件和目录在 /var/log 中包括:

1. 系统日志
  • /var/log/messages:包含系统的通用日志信息,记录了大多数系统服务和内核的消息。
  • /var/log/syslog:在某些系统上(如 Debian/Ubuntu),包含系统和应用程序的日志消息。
  • /var/log/dmesg:内核环缓冲区的日志,通常包括系统启动时的消息。
2. 应用程序日志:
  • /var/log/httpd//var/log/apache2/:Apache HTTP 服务器的日志。
  • /var/log/nginx/:Nginx 服务器的日志。
  • /var/log/mysql//var/log/mariadb/:MySQL 或 MariaDB 数据库的日志。
  • /var/log/postgresql/:PostgreSQL 数据库的日志。
3. 用户日志
  • /var/log/auth.log/var/log/secure:记录身份验证和授权相关的日志。

使用prometheus配置实例

1. 配置prometheus
sudo tee /etc/systemd/system/prometheus.service > /dev/null <<EOF
[Unit]
Description=Prometheus
# 确保 Prometheus 在网络服务启动后再启动
After=network.target

[Service]
# 以 root 用户身份运行 Prometheus 服务
User=root
Group=root
# 服务类型为 simple,表示服务的主要进程是 ExecStart 中指定的进程
Type=simple
# 启动 Prometheus,指定配置文件和数据存储路径
ExecStart=/opt/prometheus/prometheus \\
    --config.file=/opt/prometheus/prometheus.yml \\
    --storage.tsdb.path=/opt/prometheus/data
# 重新加载配置时发送 HUP 信号给主进程
ExecReload=/bin/kill -HUP \$MAINPID
# 服务失败时自动重启
Restart=on-failure

[Install]
# 在 multi-user.target 启动时启动此服务
WantedBy=multi-user.target
EOF
2. 配置alertmanager
sudo tee /etc/systemd/system/alertmanager.service > /dev/null <<EOF
[Unit]
Description=Alertmanager
# 依赖于 network.target 服务在启动时
After=network.target

[Service]
# 以 root 用户身份运行
User=root
Group=root
# 服务类型为 simple,即服务的主要进程是 ExecStart 中指定的进程
Type=simple
# 启动 Alertmanager,指定配置文件和数据存储路径
ExecStart=/opt/alertmanager/alertmanager \
    --config.file=/opt/alertmanager/alertmanager.yml \
    --storage.tsdb.path=/opt/alertmanager/data
# 重新加载配置时发送 HUP 信号给主进程
ExecReload=/bin/kill -HUP \$MAINPID
# 服务失败时自动重启
Restart=on-failure

[Install]
# 在 multi-user.target 启动时启动此服务
WantedBy=multi-user.target
EOF
3. 配置node_exporter 
sudo tee /etc/systemd/system/node_exporter.service > /dev/null <<EOF
[Unit]
Description=Node Exporter
# 确保 Node Exporter 在网络服务启动后再启动
After=network.target

[Service]
# 以 root 用户身份运行 Node Exporter 服务
User=root
Group=root
# 服务类型为 simple,表示服务的主要进程是 ExecStart 中指定的进程
Type=simple
# 启动 Node Exporter,指定其二进制文件路径
ExecStart=/opt/node_exporter/node_exporter
# 服务失败时自动重启
Restart=on-failure

[Install]
# 在 multi-user.target 启动时启动此服务
WantedBy=multi-user.target
EOF
4. 配置prometheus-webhook-dingtalk
sudo tee /etc/systemd/system/prometheus-webhook-dingtalk.service > /dev/null <<EOF
[Unit]
Description=Prometheus Webhook for DingTalk
# 确保 Prometheus Webhook for DingTalk 在网络服务启动后再启动
After=network.target

[Service]
# 以 root 用户身份运行 Prometheus Webhook for DingTalk 服务
User=root
Group=root
# 服务类型为 simple,表示服务的主要进程是 ExecStart 中指定的进程
Type=simple
# 启动 Prometheus Webhook for DingTalk,指定其二进制文件路径和配置文件路径
ExecStart=/opt/webhook-dingtalk/prometheus-webhook-dingtalk \
    --config.file=/opt/webhook-dingtalk/config.yml
# 服务失败时自动重启
Restart=on-failure

[Install]
# 在 multi-user.target 启动时启动此服务
WantedBy=multi-user.target
EOF

注意:重新加载 systemd 配置 

sudo systemctl daemon-reload
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZDICT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值