ฉันสามารถป้องกัน“ สถานะบริการ foo” ไม่ให้เพจจิ้งเอาต์พุตผ่าน "น้อยลง" ได้หรือไม่


35

คุณจะหยุดคำสั่งservice <name> statusจากการใช้lessในการส่งออกได้อย่างไร

ฉันมีสคริปต์ที่ดำเนินการดูแลระบบบางอย่างโดยอัตโนมัติและหลังจากฉันอัพเกรดเซิร์ฟเวอร์ของฉันเป็น Ubuntu 16.04 แล้วมันก็พังเพราะการกระทำที่ตรวจสอบสถานะบริการกำลังปิดกั้นเพราะใช้สิ่งที่ต้องการlessแสดงผลลัพธ์โดยเฉพาะsupervisorบริการ

ฉันมี daemons หลายตัวที่กำหนดค่าให้ทำงานและเมื่อทำงาน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

อูบุนตูเป็นระบบ systemd ซึ่งservice statusคำสั่งนั้นเรียกจริงsystemctl statusและ systemctl มี--no-pagerตัวเลือกที่ทำสิ่งที่คุณต้องการอย่างแท้จริง ดังนั้นคุณอาจจะดีกว่าโดยใช้คำสั่ง systemctl โดยตรงในสคริปต์ของคุณ

sudo systemctl --no-pager status supervisor

แก้ไข: env var SYSTEMD_PAGER

อีกวิธีหนึ่งที่ชี้ให้เห็นโดย @jwodder คือการตั้งค่าตัวแปรสภาพแวดล้อม SYSTEMD_PAGER นี้มีประโยชน์เพิ่มของนอกจากนี้ยังส่งผลกระทบต่อการส่งออกของเมื่อเรียกโดยโปรแกรมอื่นเช่นsystemctlservice

export SYSTEMD_PAGER=''
sudo service supervisor status

จะช่วยให้คุณบรรลุผลลัพธ์เดียวกัน


2
ฉันอยากจะแนะนำให้วางตัวเลือกไว้หน้าคำสั่ง:sudo systemctl --no-pager status supervisor
Jeff Schaller

แก้ไขเพื่อให้ตรงกับข้อเสนอแนะของคุณ ดีในการติดตามการใช้เครื่องมือ ขอบคุณ
ทิมเคนเนดี

2
"Ubuntu เป็นsystemdระบบ" ... เมื่อไม่ได้ใช้งานพุ่งพรวดนั่นคือ
cat

6
เพื่อให้มีการsystemctlทำงานเหมือน--no-pagerจะได้รับคุณสามารถตั้งค่าSYSTEMD_PAGERตัวแปรสภาพแวดล้อมเป็นอย่างใดอย่างหนึ่งcatหรือสตริงที่ว่างเปล่า
jwodder

@jwodder - การตั้งค่า SYSTEMD_PAGER มีประโยชน์เพิ่มของการนอกจากนี้ยังมีผลกระทบต่อการส่งออกของแม้ในขณะที่เรียกได้ว่าsystemctl serviceดี
ทิมเคนเนดี้

34

น้อยกว่าปกติจะปิดโหมดเพจเจอร์หากตรวจพบว่าเอาท์พุทไม่ได้เป็นขั้ว ดังนั้นคุณสามารถลองสร้างเอาต์พุตของคำสั่งไม่ใช่เทอร์มินัลด้วยการทำงานบางอย่างเช่น:

sudo service supervisor status | cat

4
คำตอบนี้ดีเพราะเป็นคำทั่วไป systemctlคำตอบทิมเคนเนดีเป็นสิ่งที่ดีเพราะมันเป็นเฉพาะกับ ฉันโหวตทั้งคู่
Kamil Maciorowski

ฉันเกือบจะลบคำตอบของฉันในความโปรดปรานของคนอื่น แต่ฉันเห็นว่าชิ้นอาหารอันโอชะความรู้ทั่วไปจะมีค่า สำหรับบันทึกฉันคิดว่าคำตอบอื่นควรเป็นคำตอบที่ได้รับการยอมรับ
dhag

ฉันจะเลือกคำตอบที่กว้างกว่าเสมอสิ่งอื่น ๆ ที่เท่าเทียมกัน นี่คือสิ่งที่ฉันจะทำกับ RHEL หากคำสั่งแบ็คเอนด์กำลังจะไปlessและฉันไม่ต้องการพฤติกรรมนั้น แน่นอนถ้าฉันทำสิ่งนี้ในสคริปต์ที่รวมเอาบางอย่างเช่นบรรทัด "ใช้งานอยู่:" มันจะไม่ไปที่เทอร์มินัลแล้วและปัญหานี้ก็ไม่มีอยู่จริง
Monty Harder

มันไม่ได้lessปิดอะไรเลย มันsystemctlไม่ได้เรียกเพจเจอร์ในตอนแรกเมื่อเอาต์พุตมาตรฐานไม่ใช่เทอร์มินัล
JdeBP

@MontyHarder นอกเหนือจากความจริงที่ว่าคุณไม่ควร grep out Active: เพราะคุณสามารถตรวจสอบรหัสออกของสถานะ systemctl (จริงๆคุณควรใช้ systemctl แสดงในสคริปต์แทนสถานะ) หรือ systemctl is- {active, ล้มเหลว} ซึ่งจะบอกคุณโดยไม่มีการแยกวิเคราะห์ 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แสดงพฤติกรรมเดียวกัน
Tim Kennedy

@Toby ขอโทษ แต่ฉันชอบ manpages ของฉันในบล็อครหัส
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.