xmlns="http://www.w3.org/2000/svg"style="display:系统的初始化系统和服务管理器,是目前大多数主流Linux程序。核心特点并行启动:相比传统的SysVinit(串行启动),systemd支持并行启动服务,大幅提升启动速度按需启动:不立即启动所有服务,只在需要时才启动依赖管理:明确定义服务之间的依赖关系统一管理:不仅管理系统服务,还管理挂载点、套接字、设备等二、核心概念1.Unit(单元)systemd中所有资源都被称为Unit,主要类型包括:类型扩展名作用Service.service系统服务Socket.socket进程间通信套接字Target.target一组Unit的集合(类似运行级别)Mount.mount文件系统挂载点Device.device内核识别的设备Timer.timer定时器(替代cron)2.Target(目标)替代传统的运行级别(runlevel):运行级别Target描述0runlevel0.targetpoweroff.target关机1runlevel1.targetrescue.target单用户模式2-4runlevel2-4.targetmulti-user.target多用户非图形界面5runlevel5.targetgraphical.target多用户图形界面6runlevel6.targetreboot.target重启三、常用命令服务管理#启动服务systemctl重新加载配置(不中断服务)systemctlreload启用开机自启systemctlenableservice_name#disableservice_name系统状态查看#list-units#列出所有服务(包括未启动)systemctl查看系统启动耗时systemd-analyze#查看每个服务启动耗时systemd-analyzeblame#critical-chain系统控制#重启系统systemctlreboot#关机systemctl挂起systemctlsuspend四、编写Service文件位置系统服务:/usr/lib/systemd/system/用户自定义:/etc/systemd/system/(优先级更高)2.UnitDocumentation=http://example.commysql.serviceWorkingDirectory=/opt/myappEnvironmentFile=/etc/myapp/config/opt/myapp/app.pyAlias=myapp.service3.Service类型详解Type说明simple默认值,主进程直接启动forking程序会forkdaemon)oneshot执行一次就退出,常用于初始化脚本dbus需要D-Bus就绪后才启动notify启动完成后会发送通知五、实战案例案例1:创建Nginx创建服务文件sudovim/etc/systemd/system/nginx.service[Unit]Description=TheExecStartPre=/usr/sbin/nginxreloadWantedBy=multi-user.target#重新加载配置sudosystemctldaemon-reload#启动服务sudosystemctlstart设置开机自启sudosystemctlenablenginx案例2:PythonWeb服务sudovim/etc/systemd/system/flaskapp.service[Unit]WebWorkingDirectory=/var/www/flaskappEnvironment="PATH=/var/www/flaskapp/venv/bin"EnvironmentFile=/etc/flaskapp/envExecStart=/var/www/flaskapp/venv/bin/gunicorn127.0.0.1:8000WantedBy=multi-user.target六、日志管理(journalctl)systemd自带日志系统journald,统一管理所有日志。常用journalctl--since"2023-01-01"--until"2023-01-02"#-k#-b七、定时任务(Timer)systemdTimer定时任务。示例:每天凌晨备份数据库备份脚本/usr/local/bin/backup.sh#!/bin/bashtar-czf/backup/db_$(date+\%Y\%m\%d).tar.gz/var/lib/mysqlService文件/etc/systemd/system/backup.service[Unit]backupExecStart=/usr/local/bin/backup.shUser=rootTimer文件/etc/systemd/system/backup.timer[Unit]Description=RunWantedBy=timers.target启用定时器chmod+x/usr/local/bin/backup.shsudosystemctldaemon-reloadsudosystemctlenablebackup.timersudosystemctlstartbackup.timer八、高级技巧1.在什么之后启动Conflicts=apache2.service2.CPULimitNPROC=10243.单个设置Environment=ENV=production从文件加载EnvironmentFile=/etc/myapp/envEnvironmentFile=-/etc/myapp/env-local加-表示文件不存在也不报错九、故障排查常见问题排查步骤查看服务状态systemctlstatusstart="2">查看详细日志journalctlservice_name-n50--no-pagerUnit文件语法systemd-analyzeverify/etc/systemd/system/xxx.servicestart="4">查看依赖问题systemctllist-dependenciesstart="5">重新加载配置systemctldaemon-reload十、与传统init对比特性SysVinitsystemd启动方式串行并行服务依赖数字编号显式声明日志管理syslogjournald配置语法Shell脚本声明式INI动态管理不支持支持(socket/D-Bus激活)资源控制不支持支持cgroups总结systemd作为现代系统的核心组件,提供了一套完整的系统和服务管理方案。掌握systemd系统的运作机制。从日常的服务启停,到复杂的服务编排,systemd都能提供强大的支持。