当systemctl status xxx.service 查询结果为active时,执行systemctl start xxx.service则不会执行启动操作。 需要怎么么做才能达到这种效果
时间: 2024-11-22 15:37:08 浏览: 57
当你想要确认服务已经在运行(`systemctl status xxx.service 显示 active`),并且`systemctl start xxx.service`不会再次启动它,通常是因为这个服务已经被设置为自动运行并保持活动状态。Systemd默认会记住每个服务的状态,包括是否正在运行。如果你想改变这一行为,可以调整服务的启动策略或者执行条件。
1. **停止自动重启**:你可以将服务的启动策略从`auto`改为`manual`。使用命令:
```sh
sudo systemctl set-environment SERVICE_START_MODE manual
```
然后检查服务状态:
```sh
systemctl status xxx.service
```
2. **使用Job Control**:使用`OnFailure`属性,当服务失败时才允许启动。例如:
```sh
[Unit]
OnFailure=respawn
```
这样只有在服务完全关闭(比如因为故障退出)后才会自动重新启动。
3. **使用`WantedBy`配置**:如果你的服务是依赖于其他服务的,可以设置`WantedBy`为`multi-user.target`或`graphical.target`,而不是`multi-user.target`下的`default.target`,这样它就不会在所有用户登录后自动启动。
无论哪种方式,都需要手动启动服务:
```sh
sudo systemctl start xxx.service
```
请注意,每种做法都有其适用场景,选择适合你的需求的方式。
阅读全文