shell脚本运行服务状态命令并退出

shell脚本运行服务状态命令并退出

我在使用 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

相关内容