运行服务时 Ubuntu 20.04 与 24.04 的 systemd 配置有区别吗?

Ubuntu 20.04 (focal) 和 24.04 (noble) 在 systemd 配置方面有一些区别,主要体现在 systemd 版本升级带来的新特性、默认行为和配置语法的变化上。

主要差异

1. systemd 版本

  • Ubuntu 20.04: systemd 245.4-4ubuntu3.19
  • Ubuntu 24.04: systemd 255.4-1ubuntu7
  • 版本跨度较大,带来了许多新功能

2. 配置语法变化

# 20.04 常见的配置
[Service]
Restart=always

# 24.04 新增或改进的选项
[Service]
# 新增的 Restart 模式
Restart=on-failure:3  # 限制重启次数
RestartSec=5s

3. 安全强化默认值

Ubuntu 24.04 默认启用更多安全特性:

# 24.04 默认或推荐添加
[Service]
NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=read-only
PrivateTmp=yes

4. 资源管理改进

# 24.04 支持更细粒度的控制
[Service]
MemoryMax=1G
CPUQuota=150%
IOWeight=100

5. 网络命名空间变化

# 24.04 网络配置更灵活
[Service]
PrivateNetwork=yes
IPAccounting=yes

迁移注意事项

需要检查的配置项:

  1. StandardOutput/StandardError

    # 20.04 可能使用
    StandardOutput=syslog
    
    # 24.04 建议使用
    StandardOutput=journal
  2. 环境变量处理

    # 24.04 环境文件加载更严格
    EnvironmentFile=-/etc/default/myapp  # 注意 "-" 前缀表示可选
  3. 依赖关系

    # 24.04 支持更复杂的依赖
    Wants=network-online.target
    After=network-online.target nss-lookup.target
  4. 启动超时

    # 24.04 默认超时可能不同
    TimeoutStartSec=90s  # 明确指定

最佳实践建议

创建兼容的 service 文件:

[Unit]
Description=My Application
Documentation=https://example.com
After=network.target
Requires=network.target

[Service]
Type=simple
User=myapp
Group=myapp
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/myapp
Restart=on-failure
RestartSec=10

# 安全配置(24.04 推荐)
ProtectSystem=full
ProtectHome=yes
NoNewPrivileges=yes
PrivateTmp=yes

# 资源限制
MemoryMax=512M
CPUQuota=100%

# 日志配置
StandardOutput=journal
StandardError=journal
SyslogIdentifier=myapp

[Install]
WantedBy=multi-user.target

检查命令变化:

# 20.04 常用
systemctl status service

# 24.04 新增功能
systemctl show service  # 显示完整属性
systemd-analyze security service  # 安全分析

测试建议

  1. 在 24.04 上测试现有配置

    systemd-analyze verify /etc/systemd/system/myapp.service
  2. 检查废弃的指令

    journalctl -u myapp --grep="deprecated"
  3. 性能监控

    systemd-cgtop  # 24.04 改进的资源监控

总结

主要区别在于 systemd 版本升级带来的:

  • 更多安全选项默认启用
  • 更细粒度的资源控制
  • 配置语法的小幅调整
  • 更好的日志和监控功能

建议在迁移时:

  1. 查看 systemd 发行说明
  2. 使用 systemd-analyze 验证配置
  3. 逐步测试服务在新版本上的运行情况
  4. 考虑启用新的安全特性增强防护
云服务器