我经常会遇到以下问题:命令会产生不同的结果,具体取决于命令是在我的用户 shell 中运行还是作为 Systemd 服务的一部分(例如通过ExecStart
.
有没有什么方法可以在模仿特定 Systemd 服务的 shell 中运行命令,例如dhcpcd.service
尽可能接近?拥有相同的功能、环境变量和可用资源将是一个开始。
在我当前的问题中,我很难复制ip link
我ExectStart
的dhcpcd.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
和其他标志来“模仿”您的服务环境。