背景:
在上个文章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
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://ospf.me/systemd
共有 0 条评论