systemctl 启动所有已启用但不活动的服务

systemctl 启动所有已启用但不活动的服务

我正在开发一个配置即代码工具,并想为其创建 systemd 提供程序。

现在,假设用户在其配置中描述了他们想要NetworkManager.service启用和cups.service禁用的情况。

systemctl enable NetworkManager.service我们可以分别使用和来(取消)链接相应的单元文件systemctl disable cups.service,但现在我们需要停止需要停止的服务并启动需要启动的服务。

我希望有一个命令,可以为我做到这一点 - “停止所有正在运行但需要停止的东西,并启动所有已停止但需要运行的东西”。systemctl daemon-reload不幸的是,这不是我想要的。

是否内置了此类功能systemctl,或者我必须单独操作每个服务?

聚苯乙烯这实际上应该是一个单独的问题,我想会有一些用例,我的用户将从 chrooted/容器化环境中运行我的程序,其中 PID 1 不是 systemd。尝试调用任何单元操作操作都会导致systemctl退出并显示状态 1 和消息System has not been booted with systemd as init system (PID 1). Can't operate.。有没有一种方法可以提前检查这种情况,或者我能做的最好的事情就是尝试并捕获错误?

答案1

回答原来的问题:

daemon-reload只是告诉systemd重新读取其配置。

注意使能服务意味着该服务作为其他单元的依赖项启动。假设您的默认目标是多用户,您可以尝试systemctl isolate multi-user.target;根据我的理解,它应该启动所有依赖于的启用单元多用户并阻止所有其他人。

如果这不起作用,一个使用 的输出的简单 shell 脚本systemctl list-units -t service应该可以解决问题。编辑:list-units不报告启用/禁用;你可以用systemctl status -t service \*它代替。

最后,也许你真的想要这个:

systemctl enable --now SERVICE
systemctl disable --now SERVICE

--now在启用/禁用服务的同时启动/停止服务。当然,也可以systemctl start SERVICE单独systemctl stop SERVICE进行。

相关内容