我在使用 Ubuntu 16.04。
跑步
service nginx status
让我进入此过程的交互模式。我想退出,通常在终端上按 即可完成q
,但现在我正在将其作为 shell 脚本的一部分编写。有没有办法退出并继续执行命令并显示其输出?
为了更清楚地解释这一点,当您运行此服务状态命令时,您将退出 shell,就像运行命令时一样less
,并进入与进程交互的模式。按 即可退出q
。
原因很简单,我想运行此命令并查看输出,然后继续执行其他命令并查看输出。
答案1
你运行了已弃用命令service nginx status
并得到类似这样的输出:
error@vmtest-ubuntu1604:~$ sudo service nginx status
* nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: en
Active: active (running) since Mon 2019-03-04 10:44:30 EST; 13s ago
Main PID: 16843 (nginx)
CGroup: /system.slice/nginx.service
|-16843 nginx: master process /usr/sbin/nginx -g daemon on; master_pr
|-16844 nginx: worker process
`-16845 nginx: worker process
Mar 04 10:44:30 vmtest-ubuntu1604 systemd[1]: Starting A high performance web se
Mar 04 10:44:30 vmtest-ubuntu1604 systemd[1]: Started A high performance web ser
lines 1-11/11 (END)
由此您没有收到终端提示。
首先,此命令已被弃用,因为 Ubuntu 16.04 用 systemd 取代了 upstart。此service
命令现在会尝试将您的命令转换为相应的 systemd 命令,在本例中为systemctl status nginx
。这是实际运行的命令,也是实际生成您看到的输出的命令。在未来的 Ubuntu 版本中,该service
命令将被完全删除。
这是怎么回事?
在当前版本的 systemd 中,systemctl
默认情况下,通过分页器管道输出状态less
。
您可以通过传入命令来关闭此行为--no-pager
,在这种情况下,输出将被转储到标准输出,并且您的终端立即返回。
error@vmtest-ubuntu1604:~$ sudo systemctl --no-pager status nginx
* nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2019-03-04 10:44:30 EST; 3min 33s ago
Main PID: 16843 (nginx)
CGroup: /system.slice/nginx.service
|-16843 nginx: master process /usr/sbin/nginx -g daemon on; master...
|-16844 nginx: worker process
`-16845 nginx: worker process
Mar 04 10:44:30 vmtest-ubuntu1604 systemd[1]: Starting A high performance web...
Mar 04 10:44:30 vmtest-ubuntu1604 systemd[1]: Started A high performance web ...
Hint: Some lines were ellipsized, use -l to show in full.
error@vmtest-ubuntu1604:~$
请注意,此输出不用于机器解析。如果您尝试在 shell 脚本中检查服务状态,则应使用其他systemctl
命令,例如systemctl is-active
。
error@vmtest-ubuntu1604:~$ sudo systemctl is-active --quiet nginx && echo Running || echo Stopped
Running
error@vmtest-ubuntu1604:~$ sudo systemctl stop nginx
error@vmtest-ubuntu1604:~$ sudo systemctl is-active --quiet nginx && echo Running || echo Stopped
Stopped