Systemd 配置
1. 工具定位
Section titled “1. 工具定位”Systemd 是现今大多主流 Linux 发行版的默认初始化系统(init)与系统和服务管理器。它通过 .service Unit 文件来管理各种后台守护进程的启动、重启、依赖树及销毁逻辑。
2. 标准服务配置模板 (.service)
Section titled “2. 标准服务配置模板 (.service)”一般存放于 /etc/systemd/system/ 目录下。
2.1. 示例 1: 托管 Caddy (前端代理)
Section titled “2.1. 示例 1: 托管 Caddy (前端代理)”[Unit]Description=Caddy Proxy Service
[Service]User=root# 前台阻塞式运行 (默认 Type=simple)ExecStart=/usr/bin/caddy run --config /usr/local/etc/CaddyfileExecRestart=/usr/bin/caddy reload --config /usr/local/etc/CaddyfileExecStop=/usr/bin/caddy stop
[Install]WantedBy=multi-user.target2.2. 示例 2: 托管 Supervisor (进程管理池)
Section titled “2.2. 示例 2: 托管 Supervisor (进程管理池)”[Unit]Description=Supervisor daemon
[Service]User=rootType=forking # 必须声明为 forking,因为该指令会在后台派生新进程ExecStart=/opt/miniconda/envs/audit/bin/supervisord -c /etc/supervisord.confExecStop=/opt/miniconda/envs/audit/bin/supervisorctl shutdownExecReload=/opt/miniconda/envs/audit/bin/supervisorctl reloadKillMode=processRestart=on-failureRestartSec=42s
[Install]WantedBy=multi-user.target3. 核心配置属性深度解析
Section titled “3. 核心配置属性深度解析”3.1. Type:启动流派判定
Section titled “3.1. Type:启动流派判定”决定 systemd 如何判断该服务是否已“成功启动”。
simple(默认):systemd 认为被ExecStart唤起的那个原始进程就是主进程。只要该进程不退出,服务就一直处于 running 状态。forking:专为传统的 Unix 守护进程设计。这类程序启动后,会立刻fork()出一个后台子进程去干活,然后主进程(父进程)自行退出。systemd 看到父进程退出后,会去追踪子进程作为服务主体(通常需配合PIDFile选项)。
3.2. KillMode:进程组屠杀策略
Section titled “3.2. KillMode:进程组屠杀策略”决定在执行 systemctl stop 时,systemd 如何向目标发送停止信号。
control-group(默认):暴力模式。连锅端掉该 Control Group 中的 所有剩余子进程。mixed:优雅模式。先向主进程发送SIGTERM祈求它自己清理退出;如果超时未响应,再向它派生的所有子进程发送无可阻挡的SIGKILL强制剿灭。process:只终止主进程。适用于主进程用来“孵化”某些独立后台进程,且你希望主服务挂掉后,那些后台干活的进程能继续存活。none:systemd 不主动发送任何 Kill 信号,完全依赖程序的ExecStop脚本自己料理后事。
4. 日志管理与资源释放 (journalctl)
Section titled “4. 日志管理与资源释放 (journalctl)”Systemd 原生集成了 journald 来接管所有服务的控制台输出。如果不加限制,它可能会吃掉巨大的磁盘空间与内存映射。
释放日志空间的紧急指令:
# 1. 强制将还在内存缓冲区中的日志刷入磁盘journalctl --flush
# 2. 按体积清理:仅保留最新的 100MB 日志,其余丢弃journalctl --vacuum-size=100M
# 3. 按时间清理:仅保留最近 2 小时内的日志journalctl --vacuum-time=2h日常优化:修改 /etc/systemd/journald.conf 中的 SystemMaxUse 参数持久化限制体积。