目录
3. 自定义的 ExecStartPre 和 ExecStartPost
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/
- 系统包提供的单元文件
单元文件结构
一个单元文件包含以下几个部分:
- [Unit]:描述单元的基本信息和依赖关系。
- [Service]:定义服务的行为。
- [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. 带有环境变量的单元文件
如果需要设置环境变量,可以使用 EnvironmentFile
或 Environment
指令:
[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: 启动服务之后执行的命令。
配置管理
-
重新加载配置
在修改单元文件后,需要重新加载
systemd
配置:sudo systemctl daemon-reload
-
启动和停止服务
启动、停止和重启服务的命令:
sudo systemctl start my_service sudo systemctl stop my_service sudo systemctl restart my_service
-
启用和禁用服务
启用服务以便在系统启动时自动启动:
sudo systemctl enable my_service
禁用服务以防止自动启动:
sudo systemctl disable my_service
-
检查服务状态
查看服务的当前状态:
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
标签:systemd,log,service,启动,sudo,日志,my,自定义
From: https://blog.csdn.net/Lzcsfg/article/details/140864887