Назад | Перейти на главную страницу

сценарий оболочки, запускающий команду состояния службы и выход

Я использую 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