“service foo status”가“less”를 통해 출력을 페이징하는 것을 방지 할 수 있습니까?


35

명령 이 출력 service <name> status에서 사용 less되는 것을 어떻게 중지 합니까?

일부 sysadmin 작업을 자동화하는 스크립트가 있으며 서버를 Ubuntu 16.04로 업그레이드 한 후 less출력, 특히 supervisor서비스 를 표시 하는 것과 같은 것을 사용하여 서비스 상태를 확인하는 작업이 차단 되어 중단됩니다.

여러 데몬을 실행하도록 구성했으며 run을 실행하면 다음과 같은 결과가 나타납니다 sudo service supervisor status.

* supervisor.service - Supervisor process control system for UNIX
   Loaded: loaded (/lib/systemd/system/supervisor.service; disabled; vendor preset: enabled)
   Active: active (running) since Mon 2017-02-06 20:35:34 EST; 12h ago
     Docs: http://supervisord.org
  Process: 18476 ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown (code=exited, status=0/SUCCESS)
 Main PID: 20228 (supervisord)
   CGroup: /system.slice/supervisor.service
           |- 7387 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7388 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7389 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7390 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7391 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7392 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7393 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7394 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7395 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7396 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7397 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7398 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7678 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7679 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7680 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7681 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7682 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7683 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7684 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7685 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7693 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7694 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7698 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7702 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7703 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7705 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7707 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7709 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7710 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7712 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7713 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7717 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7720 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7723 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7724 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7728 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7730 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7731 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7733 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7734 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7735 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7738 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7743 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7747 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7748 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7750 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7752 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7756 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7758 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7761 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7763 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7764 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7772 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7781 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7785 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7794 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7799 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7801 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
           |- 7805 /usr/local//myproject/.env/bin/python2.7 /usr/local//myproject/.env/bin/celery worker -A /myproject -l info --autoreload
lines 1-66

그리고 수동으로 아래로 스크롤하거나을 눌러 Q종료 할 때까지 반환되지 않습니다 . 이 기능을 어떻게 비활성화합니까?

답변:


54

우분투는 시스템화 된 시스템으로, service status명령이 실제로 호출 systemctl status하고, systemctl에는 --no-pager원하는 것을 정확하게 수행 하는 옵션이 있습니다. 따라서 스크립트에서 straight systemctl 명령을 사용하는 것이 좋습니다.

sudo systemctl --no-pager status supervisor

편집 : env var SYSTEMD_PAGER

@jwodder가 지적한 다른 방법은 SYSTEMD_PAGER 환경 변수를 설정하는 것입니다. 이 systemctl같은 다른 응용 프로그램에 의해 호출 될 때 의 출력에 영향을주는 추가 이점이 있습니다 service.

export SYSTEMD_PAGER=''
sudo service supervisor status

동일한 출력을 얻을 수 있습니다.


2
나는 명령 앞에 옵션을 넣기를 제안하고 싶습니다 :sudo systemctl --no-pager status supervisor
Jeff Schaller

제안과 일치하도록 수정했습니다. 의도 된 도구 사용을 따르는 것이 좋습니다. 감사.
팀 케네디

2
"Ubuntu는 systemd시스템입니다"... Upstart를 사용하지 않을 때
cat

6
systemctl항상 --no-pager주어진 것처럼 동작하도록 하기 위해 SYSTEMD_PAGER환경 변수를 cat빈 문자열 로 설정할 수 있습니다 .
jwodder

@jwodder 설정 SYSTEMD_PAGER은에 systemctl의해 호출 될 때도 출력에 영향을주는 이점이 있습니다 service. 좋은.
팀 케네디

34

less는 일반적으로 출력이 터미널이 아님을 감지하면 호출기 모드를 끕니다. 따라서 다음과 같이 실행하여 명령의 출력을 터미널이 아닌 것으로 만들 수 있습니다.

sudo service supervisor status | cat

4
이 답변은 일반적이기 때문에 좋습니다. Tim Kennedy의 답변은에 고유하기 때문에 좋습니다 systemctl. 나는 둘 다 찬성했다.
Kamil Maciorowski

나는 다른 답변에 찬성하여 내 대답을 거의 삭제하려고했지만 일반적인 지식 tidbit가 어떻게 가치가 있는지 알 수 있습니다. 기록을 위해 다른 대답이 받아 들여 져야한다고 생각합니다.
dhag

나는 항상 더 일반적인 대답을 선택하고 다른 모든 것들은 동일합니다. 백엔드 명령이 진행 less중이고 해당 동작을 원하지 않는 경우 RHEL에서 수행 한 작업입니다 . 물론 "Active :"줄과 같은 스크립트를 작성하는 경우이 작업은 이미 터미널로 진행되지 않으며이 문제는 존재하지 않습니다.
Monty Harder

less아무것도 끄지 않습니다 . 그건 systemctl표준 출력이 터미널이 아닐 때 처음에 호출기를 호출하지.
JdeBP

@MontyHarder는 Systemctl 상태의 종료 코드 (실제로 상태 대신 스크립트에서 systemctl show를 사용해야 함) 또는 systemctl is- {active, failed}를 확인할 수 있기 때문에 Active : 행을 grep해서는 안된다는 사실 외에도 ,이 파싱 BS없이 당신에게 말할 것이다 :)
또 다른 사용자

16

보낸 사람 man systemctl:

ENVIRONMENT
...
   $SYSTEMD_PAGER
       Pager to use when --no-pager is not given; overrides $PAGER.
       Setting this to an empty string or the value "cat" is equivalent to
       passing --no-pager.

   $SYSTEMD_LESS
       Override the default options passed to less ("FRSXMK").

따라서 환경 초기화의 어딘가에 다음을 설정하십시오.

SYSTEMD_PAGER=

좋은. 이것에 대한 좋은 점은 SYSTEMD_PAGER을 설정하면 systemctl을 호출하는 다른 프로그램에도 영향을 미친다는 것입니다! 이제 service supervisor status동일한 행동을 보입니다.
팀 케네디

@Toby 죄송하지만 코드 블록에서 맨 페이지를 선호합니다.
muru

3

sudoers파일 을 수정해야 합니다.

 Defaults        env_keep += "SYSTEMD_PAGER"

이것은 매우 유용한 정보입니다. SYSTEMD_PAGER을 전환 한 후에도 sudo systemctl status <service>여전히 페이징되었습니다. +1
Procyclinsur
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.