在特定systemd服务的环境中运行命令

在特定systemd服务的环境中运行命令

我经常会遇到以下问题:命令会产生不同的结果,具体取决于命令是在我的用户 shell 中运行还是作为 Systemd 服务的一部分(例如通过ExecStart.

有没有什么方法可以在模仿特定 Systemd 服务的 shell 中运行命令,例如dhcpcd.service尽可能接近?拥有相同的功能、环境变量和可用资源将是一个开始。

在我当前的问题中,我很难复制ip linkExectStartdhcpcd.service.但这对于调试 systemd 服务来说通常非常有用。

答案1

您可以使用systemd-run

# systemd-run ip link                                           
Running as unit: run-r2723175b10a543f38faddda99baa8ca3.service
# journalctl -u run-r2723175b10a543f38faddda99baa8ca3.service
-- Logs begin at Fri 2020-09-11 23:45:32 CEST, end at Fri 2020-09-18 15:33:51 CEST. --
Sep 18 15:33:51 w systemd[1]: Started /usr/bin/ip link.
Sep 18 15:33:51 w ip[3904]: 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
...

使用-E和其他标志来“模仿”您的服务环境。

相关内容