Я использую Ubuntu 16.04.
Бег
service nginx status
переводит меня в интерактивный режим с этим процессом. Я хочу выйти, что обычно на терминале выполняется нажатием q
, но сейчас я пишу это как часть сценария оболочки. Есть ли способ выйти оттуда и продолжить выполнение команд и показать их результат?
Так что просто чтобы объяснить это более ясно. Когда вы запускаете эту команду состояния службы, вы выходите из оболочки, как и при запуске less
команду и перевести в режим взаимодействия с процессом. Вы выходите из него, нажав q
.
Причина проста в том, что я хотел бы запустить эту команду и увидеть результат, а затем перейти к выполнению других команд и увидеть результат.
Вы запустили устарел команда 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. В 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:~$
Обратите внимание, что этот вывод не предназначен для машинного анализа. Если вы пытаетесь проверить статус службы в сценариях оболочки. вы должны использовать другие 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