首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么退出状态在运行“systemctl start;systemctl is-active`”和“systemctl is-active`”时有所不同?

为什么退出状态在运行“systemctl start;systemctl is-active`”和“systemctl is-active`”时有所不同?
EN

Unix & Linux用户
提问于 2018-04-27 10:40:23
回答 3查看 4.7K关注 0票数 8

下面的序列给出了第一个命令的返回值,而不是我所期望的第二个命令的返回值(无论我在子subshell中运行第一个命令):

代码语言:javascript
复制
sudo systemctl start x; sudo systemctl is-active --quiet x; echo $?;
(sudo systemctl start x); sudo systemctl is-active --quiet x; echo $?;

服务x坏了,无法启动,因此他没有运行。下面的命令ran of为我提供了一个正确的3返回值:

代码语言:javascript
复制
sudo systemctl is-active --quiet x; echo $?;

那么,为什么我在运行command; command; echo $?时获得第一个命令(D5)的返回值,而不是使用echo $?获得第二个命令的返回值(3)?

我上GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)了。我知道,如果我把它分成两行,就行了:

代码语言:javascript
复制
sudo systemctl start x;
sudo systemctl is-active --quiet x; echo $?;

但是我需要把它作为一个一行程序,就像我把它放在PHP函数中一样。运行两次shell_exec()与将命令放在一行中具有相同的结果。

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2018-04-27 13:46:27

当我遇到这样的问题,我倾向于遵循夏洛克福尔摩斯的咒语,并考虑什么是不可信的,一旦不可能被消除。当然,对于电脑,没有什么是不可能的,但是有些事情是不太可能的,我们一开始就可以忽略它们。(这与原来的标题“command; command; echo $?-返回值不正确,为什么?”)更有意义。

在这种情况下,如果

代码语言:javascript
复制
sudo systemctl start x; sudo systemctl is-active --quiet x; echo $?;

显示$?为0,这意味着systemctl is-active确实表示成功。一个单独的systemctl is-active显示服务不是活动的这一事实强烈地表明,在服务和输入命令的人工操作符之间存在竞争;基本上,服务确实启动,足以使systemctl start完成,systemctl is-active运行并找到服务活动,但随后服务失败,因此人工输入的systemctl is-active发现它不活动。

systemctl startsystemctl is-active之间增加一个较短的延迟应避免出现假阳性。

票数 14
EN

Unix & Linux用户

发布于 2018-04-27 11:30:28

Systemd使服务在短时间内启动(0.1秒),然后服务崩溃。

返回应该是3的;

代码语言:javascript
复制
sudo systemctl start x; sleep 0.2; sudo systemctl is-active --quiet x; echo $?;

0.2秒相比,它返回的0不应该是这样的:

代码语言:javascript
复制
sudo systemctl start x; sleep 0.1; sudo systemctl is-active --quiet x; echo $?;

而且,如果我做了systemctl start x; ps -fA | grep -i x,我会看到服务。如果我在那之后再运行ps,它就消失了。

票数 4
EN

Unix & Linux用户

发布于 2019-02-12 16:58:16

试试这个:

代码语言:javascript
复制
sudo systemctl start x && sudo systemctl is-active --quiet x; echo $?;

只有当前面的命令成功完成时,&&才会强制系统按顺序运行这些命令。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/440390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档