简介
1.1 什么是systemctl命令
systemctl是一个在Linux系统中用于管理系统服务的命令。它是systemd这个初始化系统的一部分,通过控制和监视系统的服务和单位文件,提供了对系统进程的强大管理功能。
1.2 systemctl的作用和用途
systemctl可以用于启动、停止、重启和重新加载服务,查看服务状态以及设置默认启动级别等。它还可以管理服务之间的依赖关系,定制服务配置,并对服务的日志进行管理。
1.3 systemctl与其他类似命令的区别
相比于传统的service命令,systemctl更加强大和灵活,支持更多的功能和选项。而且,systemctl可以与systemd的其他工具和特性紧密配合,提供更完整的系统管理解决方案。
基本用法
2.1 systemctl的语法和常用选项
要使用systemctl命令,可以按照以下语法:
systemctl [选项] [命令] [服务名称]
常用选项包括:
-h
:显示帮助信息-t TYPE
:指定服务类型,如service
、socket
、device
等
2.2 启动、停止、重启、查看状态、开机自启服务
- 启动一个服务:
systemctl start [服务名称]
- 停止一个服务:
systemctl stop [服务名称]
- 重启一个服务:
systemctl restart [服务名称]
- 重新加载一个服务的配置文件:
systemctl reload[服务名称]
- 查看一个服务的运行状态、PID等信息:
systemctl status [服务名称]
- 将一个服务设置为开机自启动:
systemctl enable [服务名称]
服务管理
3.1 列出所有已启用的服务
列出所有已启用的服务:
systemctl list-unit-files --state=enabled
3.2 启用和禁用服务
启用一个服务:
systemctl enable [服务名称]
禁用一个服务:
systemctl disable [服务名称]
3.3 添加和移除服务
添加一个自定义的服务(需创建对应的单位文件):
systemctl link /path/to/服务单位文件
移除一个服务的链接:
systemctl unlink /path/to/服务单位文件
3.4 定制服务配置
编辑一个服务的配置文件:
systemctl edit [服务名称]
然后在编辑器中进行修改,保存并退出即可。
依赖关系管理
4.1 服务之间的依赖关系
查看一个服务的依赖关系:
systemctl show [服务名称]--property=Requires
systemctl show [服务名称] --property=Wants
4.2 解决依赖问题
启用和禁用服务的同时解决依赖问题:
systemctl enable --now [服务名称]
systemctl disable --ignore-dependencies [服务名称]
4.3 配置服务启动顺序
使用Before和After配置服务之间的启动顺序:
[Unit]
Before=服务1.service
After=服务2.service
日志管理
5.1 查看服务日志
查看一个服务的日志:
journalctl -u [服务名称]
5.2 设置日志级别和存储位置
编辑journald.conf文件来设置日志级别和存储位置:
sudo systemctl edit --full systemd-journald.service
5.3 日志轮转和压缩
配置日志轮转和压缩策略,可以通过编辑对应的单位文件来实现。
常用技巧和实例
6.1 使用通配符批量操作服务
systemctl start [服务名称]
systemctl stop [服务名称]
systemctl restart [服务名称]
6.2 定时启动和停止服务
使用timer单位文件来定时启动和停止服务,类似于cron任务。
6.3 通过systemd单位文件自定义服务
创建自定义的服务单位文件,以实现特定需求。
6.4 进程控制和资源限制
通过配置[Service]段的相关参数,对服务进程进行控制和资源限制。
故障排查和常见问题
7.1 查找和解决服务启动失败的原因
查看服务日志,使用journalctl命令来定位问题所在。
7.2 解决服务无法停止或重新加载的问题
尝试使用systemctl kill命令强制停止或重新加载服务。
7.3 处理日志溢出和写入错误
调整日志存储位置、设置日志轮转策略,或增加系统日志存储空间。
service文件配置
8.1 添加服务文件
在/etc/systemd/system/文件目录下添加.service服务文件。
8.2 编写.service文件
[Unit]
Description=test for service
ConditionFileIsExecutable=/etc/init.d/tst.sh
After=weston.service
[Service]
Type=forking
ExecStart=-/etc/init.d/tst.sh start
ExecStop=-/etc/init.d/tst.sh stop
[Install]
WantedBy=multi-user.target
从上面可以看出.serive文件包括三个部分:[Unit]、[Service]、[Install]。
[Unit]
Description:对当前服务的简单描述。
After:指定.serive在哪些服务之后进行启动;
Before:指定.serive在哪些服务之前进行启动;
除上述内容,文件中还可能出现以下内容:
Requires:指定服务依赖于哪些服务(强依赖关系,一旦所依赖服务异常,当前服务也随之停止);
Wants:指定服务依赖于哪些服务(弱依赖关系,所依赖服务异常不影响当前服务正常运行)。
[Service]
Type:定义启动类型。可设置:simple,exec,forking,oneshot,dbus,notify,idle。
simple:ExecStart 字段启动的进程为该服务的主进程;
forking:ExecStart 字段的命令将以 fork() 方式启动,此时父进程将会退出,子进程将成为主进程;
ExecStart:定义启动进程时执行的命令;
ExecStop:停止服务时执行的命令;
除上述内容外,文件中还可能出现:
EnvironmentFile:环境配置文件,用来指定当前服务启动的环境变量;
ExecReload:重启服务时执行的命令;
ExecStartPre:启动服务之前执行的命令;
ExecStartPost:启动服务之后执行的命令;
ExecStopPost:停止服务之后执行的命令;
RemainAfterExit:设为yes,表示进程退出以后,服务仍然保持执行;
RestartSec:重启服务之前需要等待的秒数。
KillMode:定义 Systemd 如何停止服务,可以设置的值如下:
control-group(默认值):当前控制组里面的所有子进程,都会被杀掉;
process:只杀主进程;
mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号;
none:没有进程会被杀掉。
Restart:定义了退出后,Systemd 的重启方式,可以设置的值如下:
no(默认值):退出后不会重启;
on-success:当进程正常退出时(退出状态码为0),才会重启;
on-failure:当进程非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启;
on-abnormal:当被信号终止和超时,才会重启;
on-abort:当收到没有捕捉到的信号终止时,才会重启;
on-watchdog:看门狗超时退出,才会重启;
always:总是重启。
[Install]
Install一般填为WantedBy=multi-user.target,表示多用户环境下服务被启用。
8.3 实例
[Unit]
Description=[服务名称]
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=simple
WorkingDirectory=[路径]
ExecStart= /usr/bin/dotnet [dll名称] --urls "http://*:[端口]"
ExecReload=/bin/kill -s HUP $MAINPID
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
标签:服务,service,启动,---,systemctl,名称,Linux,日志
From: https://blog.csdn.net/caohaiye/article/details/141329084