浅谈Linux发行版中的systemd服务

omanik 2024-7-27 167 7/27

背景:

在上个文章openssh的rpm包制作中,结尾中提到如果无法使用systemctl enable 启动某个服务时,大概率是/etc/systemd/system/下没有对应的.service文件。以上文中的sshd为例。

分析:

通常我们在使用systemctl enable命令时,/etc/systemd/system/需要有对应的.service文件,如果提示启动失败,可以用如下命令验证一下

[root@bfkzfwq mzs]# systemctl is-enabled sshd
sshd.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig sshd --level=5
enabled

当输出这个时,就表明systemctl检测到sshd并不是一个原生的systemd服务。因此,它重定向到 /sbin/chkconfig 命令来执行这个任务,这是因为 chkconfig 是用于 SysVinit 系统(较旧的初始化系统)的服务管理工具。此时在运行级别 5 下sshd自启动是启用的。但是,为了确保 sshd 确实能够启动,并且为了未来的兼容性(因为越来越多的系统正在转向只使用 systemd),要sshd 也被注册为一个 systemd 服务。需要进行如下操作。

配置:

首先,你需要以root用户或使用sudo权限来编辑或创建服务文件。服务文件通常位于`/etc/systemd/system/`目录下。

1. 创建服务文件:

vim /etc/systemd/system/sshd.service

2. 编写服务文件内容:

将以下内容粘贴到vim编辑器中,

[Unit]
Description=OpenSSH server daemon
After=network.target auditd.service
DependsOn=syslog.target

[Service]
Type=notify
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
PrivateTmp=true

[Install]
WantedBy=multi-user.target

 

注意:
- `ExecStart`行中的`/usr/sbin/sshd`是sshd服务的常见安装路径,但根据你的系统配置,这个路径可能有所不同。你可以使用`which sshd`命令来查找正确的路径。
- `$OPTIONS`是一个环境变量占位符,你通常不需要在这个文件中设置它,除非你有特殊的启动选项要传递给sshd。如果你没有特殊选项,可以简单地移除`$OPTIONS`。
- `Restart=on-failure`和`RestartSec=42s`指示systemd在sshd服务失败时自动重启它,并在42秒后再次尝试。

 

3. 重新加载systemd配置:

在创建或修改服务文件后,需要告诉systemd重新加载其配置,以便它识别新的或更改的服务文件:

sudo systemctl daemon-reload

 

4. 启用和启动服务:

sudo systemctl enable sshd
sudo systemctl start sshd

 

5. 检查服务状态:

使用以下命令来检查SSH服务的状态,以确保它正在运行:

sudo systemctl status sshd

这个服务文件是一个基本示例,根据具体需求,可能需要对其进行一些调整。例如,如果你的SSH服务需要监听非标准端口,你可能需要在`ExecStart`行中通过`-p`选项来指定端口号。

结果:

基于此应该就可以正常启动sshd服务了,此时再验证发现输出正常

[root@VM-4-6-centos mzs]# systemctl is-enabled sshd
enabled

 

 

 

- THE END -

omanik

7月27日19:02

最后修改:2024年7月27日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论