"的简单方法?-6ren"> "的简单方法?-好像是systemd-run 的结果状态码总是 0除非调用运行时 systemd 单元失败。 示例 1: $ sudo systemd-run /usr/bin/true Running as uni-6ren">
gpt4 book ai didi

linux - 获取结果状态代码 "systemd-run "的简单方法?

转载 作者:太空狗 更新时间:2023-10-29 12:14:04 25 4
gpt4 key购买 nike

好像是systemd-run <command>的结果状态码总是 0除非调用运行时 systemd 单元失败。

示例 1:

$ sudo systemd-run /usr/bin/true
Running as unit run-12255.service.
$ echo $?
0

$ sudo systemd-run /usr/bin/false
Running as unit run-12258.service.
$ echo $?
0

我可以通过以下方式知道命令是否成功完成。

示例 2:

$ systemctl status $(sudo systemd-run /usr/bin/true 2>&1 | awk '{ print $4 }' | sed -e 's/\.$//')
● run-13004.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
$ echo $?
3

$ systemctl status $(sudo systemd-run /usr/bin/false 2>&1 | awk '{ print $4 }' | sed -e 's/\.$//')
● run-13021.service - /usr/bin/false
Loaded: loaded (/run/systemd/system/run-13021.service; static; vendor preset: disabled)
Drop-In: /run/systemd/system/run-13021.service.d
└─50-Description.conf, 50-ExecStart.conf
Active: failed (Result: exit-code) since Sat 2015-08-08 07:31:10 UTC; 15ms ago
Process: 13024 ExecStart=/usr/bin/false (code=exited, status=1/FAILURE)
Main PID: 13024 (code=exited, status=1/FAILURE)
$ echo $?
3

但是返回码总是3因为它是 systemctl status 的结果命令。最后,我必须做如下事情;

示例 3:

$ systemctl status $(sudo systemd-run /usr/bin/true 2>&1 | awk '{ print $4 }' | sed -e 's/\.$//') | (egrep -m 1 -o 'code=exited, status=[0-9]+'| egrep -o '[0-9]+') || echo '0'
0

$ systemctl status $(sudo systemd-run /usr/bin/false 2>&1 | awk '{ print $4 }' | sed -e 's/\.$//') | (egrep -m 1 -o 'code=exited, status=[0-9]+'| egrep -o '[0-9]+') || echo '0'
1

这太奇怪了!

我使用systemd-run的原因并得到返回码是我想在一个正在运行的systemd-nspawn中执行一个或多个命令编辑容器环境(作者 systemd-run --machine=my_container)。

总而言之,我想在 systemd-nspawn 中执行命令编辑容器并得到结果代码就像docker exec (没有 machinectl login 因为我想通过非交互式脚本文件执行这么多命令)。谁能告诉我获得它的简单方法?

最佳答案

您需要使用--remain-after-exit 来告诉Systemd 保留服务单元,以便可以获取其状态。

# systemd-run  --unit=kek$RANDOM --remain-after-exit     bash -c 'sleep 2; id; exit 216'
Running as unit kek30537.service.

# systemctl show kek30537.service -p ExecMainStatus
ExecMainStatus=216

关于linux - 获取结果状态代码 "systemd-run <command>"的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31890970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com