systemct命令系列
- 核心管理命令
- start
- 启动一个服务
- stop
- 停止一个服务
- restart
- 重启一个服务
- reload
- 重新加载配置
- status
- 查看服务状态
- start
- 开机自启管理命令
- enable
- 设置服务开机自启
- disable
- 取消服务开机自启
- is-enabled
- 检查服务是否开机自启
- mask
- 彻底禁用服务
- unmask
- 取消禁用
- enable
- 查看与诊断命令
- list-units
- 列出所有正在运行的单元
- list-unit-files
- 列出所有已安装的单元文件及其状态
- show
- 显示服务的详细属性
- cat
- 查看服务的单元文件内容
- list-units
- 核心管理命令
journalctl -u
- 查看特定服务的日志
- journalctl -u nginx -f
- 实时监控Nginx的日志输出,像看直播一样
- journalctl -u nginx --since "10 min ago
- 只看最近10分钟的日志
编写服务清单
- 所有由我们自定义的服务清单,都应该放在/etx/systemd/system/目录下
- 一个典型的.service文件由三个部分组成
- [Unit](服务的自我介绍)
- Description
- 服务的描述,简单易懂
- After
- 定义启动顺序
- After=network.target
- 意思是,这个服务硬爱在网络准备好之后再启动
- Wants/Requires
- 定义依赖关系
- Wants
- 弱依赖
- 它依赖的服务启动失败了,不影响自己启动
- 弱依赖
- Requires
- 强依赖
- 强依赖无法启动,要启动的服务也启动不了
- 强依赖
- Wants
- 定义依赖关系
- Description
- [Service](服务的核心工作)
- Type
- 服务的启动类型
- simple(默认)
- ExecStart后面的命令就是主进程
- forking
- ExexStart会启动一个进程,这个进程会fork一个子进程作为主进程,然后父进程退出
- 传统后台守护进程常用
- ExexStart会启动一个进程,这个进程会fork一个子进程作为主进程,然后父进程退出
- oneshot
- 类似simple,但systemd会等待这个命令执行完毕才认为服务启动成功,适合一次性脚本
- simple(默认)
- 服务的启动类型
- User/Group
- 指定用哪个用户和组来运行服务,为了安全,一般不使用root
- WorkingDirectory
- 命令执行前切换到的工作目录
- ExecStart
- 核心
- 定义启动服务的命令
- 核心
- ExecReload
- 定义执行systemctl reload时运行的命令
- ExexStop
- 定义执行systemctl stop时运行的命令(可选)
- Restart
- 定义什么情况下自动重启服务
- no(默认)
- 不重启
- on-failure
- 当服务以非0状态码退出时重启
- always
- 只要服务退出,不管什么原因,都重启
- no(默认)
- 定义什么情况下自动重启服务
- Type
- [Install](服务的户口本)
- WantedBy
- 定义服务属于哪个“目标集”,对于绝大多数开机自启的网络服务,都写WantedBy=multi-user.target
- 表示系统进入“多用户模式”时,这个服务就应该被启动
- systemctl enable命令就是靠这个配置来创建软链接的
- 表示系统进入“多用户模式”时,这个服务就应该被启动
- 定义服务属于哪个“目标集”,对于绝大多数开机自启的网络服务,都写WantedBy=multi-user.target
- WantedBy
- [Unit](服务的自我介绍)
示例
编写服务清单文件
用systemctl管理新服务
- 通知systemd,系统中新增了服务
- sudo systemctl daemon-reload
- 每次修改或新增.service文件后,必须执行此命令
- sudo systemctl daemon-reload
- 启动服务
- sudo systemctl start [xxx].service
- 检查状态
- systemctl status [xxx].service
- 验证脚本是否工作
- tail -f /tmp/[xxx].log
- 设置开机自启
- sudo systemctl enable [xxx].service
- 停止与禁用
- sudo systemctl stop [xxx].service
- sudo systemctl disable [xxx].service
- 通知systemd,系统中新增了服务
注意
- 一般使用命令来设置开机自动启动,而不是使用,service配置文件中