Linux---systemctl常用命令以及service文件配置

简介
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:指定服务类型,如servicesocketdevice

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值