Tôi có thể ngăn chặn dịch vụ của Foo tình trạng của Google khỏi phân trang đầu ra của nó thông qua ít hơn không?


35

Làm thế nào để bạn dừng lệnh service <name> statussử dụng lesstrên đầu ra của nó?

Tôi có một tập lệnh tự động hóa một số hành động sysadmin và sau khi tôi nâng cấp máy chủ của mình lên Ubuntu 16.04, nó bị hỏng vì các hành động kiểm tra trạng thái dịch vụ đang bị chặn vì nó sử dụng thứ gì đó như lessđể hiển thị đầu ra, cụ thể là supervisordịch vụ.

Tôi có một số trình nền được cấu hình để chạy và khi chạy sudo service supervisor status, tôi nhận được:

* 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

Và nó không quay trở lại cho đến khi tôi cuộn xuống hoặc nhấn Qđể thoát. Làm cách nào để tắt tính năng này?

Câu trả lời:


54

Ubuntu là một hệ thống systemd, trong đó service statuslệnh thực sự gọi systemctl statusvà systemctl có một --no-pagertùy chọn thực hiện chính xác những gì bạn đang tìm kiếm. Vì vậy, bạn có thể tốt hơn bằng cách sử dụng lệnh systemctl thẳng trong tập lệnh của mình.

sudo systemctl --no-pager status supervisor

EDIT: env var HỆ THỐNG

Một cách khác, như được chỉ ra bởi @jwodder, là đặt biến môi trường HỆ THỐNG HỆ THỐNG HỆ THỐNG. Điều này có thêm lợi ích cũng ảnh hưởng đến đầu ra systemctlkhi được gọi bởi một ứng dụng khác như thế nào service.

export SYSTEMD_PAGER=''
sudo service supervisor status

Sẽ cho phép bạn đạt được đầu ra tương tự.


2
Tôi muốn đề xuất đặt tùy chọn trước lệnh:sudo systemctl --no-pager status supervisor
Jeff Schaller

chỉnh sửa để phù hợp với đề xuất của bạn. tốt để làm theo dự định sử dụng các công cụ. cảm ơn.
Tim Kennedy

2
"Ubuntu là một systemdhệ thống" ... khi Upstart không được sử dụng đó là
con mèo

6
Để systemctlluôn luôn hành xử như --no-pagerđược đưa ra, bạn có thể đặt SYSTEMD_PAGERbiến môi trường thành một cathoặc chuỗi rỗng.
jwodder

@jwodder - cài đặt HỆ THỐNG HỆ THỐNG có thêm lợi thế là cũng ảnh hưởng đến đầu ra systemctlngay cả khi được gọi bởi service. Tốt đẹp.
Tim Kennedy

34

ít hơn bình thường sẽ tắt chế độ máy nhắn tin của nó nếu nó phát hiện ra rằng đầu ra của nó không phải là một thiết bị đầu cuối. Vì vậy, bạn có thể thử làm cho đầu ra của lệnh không phải là thiết bị đầu cuối bằng cách chạy một cái gì đó như:

sudo service supervisor status | cat

4
Câu trả lời này là tốt bởi vì nó chung chung. Câu trả lời của Tim Kennedy là tốt bởi vì nó là cụ thể systemctl. Tôi ủng hộ cả hai.
Kamil Maciorowski

Tôi gần như đã xóa câu trả lời của mình để ủng hộ người khác, nhưng tôi thấy cách thức kiến ​​thức chung có thể có giá trị. Đối với hồ sơ, tôi nghĩ rằng câu trả lời khác nên được chấp nhận.
dhag

Tôi sẽ luôn chọn câu trả lời chung chung hơn, tất cả những thứ khác đều bằng nhau. Đây chính xác là những gì tôi sẽ làm trên RHEL nếu lệnh back-end sẽ xảy ra lessvà tôi không muốn hành vi đó. Tất nhiên, nếu tôi đang thực hiện điều này trong một kịch bản phát ra thứ gì đó như dòng "Hoạt động:", thì nó đã không chuyển sang thiết bị đầu cuối và vấn đề này thậm chí sẽ không tồn tại.
Monty Harder

Nó không lesstắt gì cả. Nó systemctlkhông gọi máy nhắn tin ở nơi đầu tiên khi đầu ra tiêu chuẩn của nó không phải là thiết bị đầu cuối.
JdeBP

@MontyHarder bên cạnh thực tế là bạn có thể không nên sử dụng dòng Active: bởi vì bạn chỉ có thể kiểm tra mã thoát của trạng thái systemctl (thực sự bạn nên sử dụng systemctl hiển thị trong tập lệnh thay vì trạng thái) hoặc systemctl là- {active, fail} , sẽ cho bạn biết mà không cần bất kỳ phân tích cú pháp nào BS :)
Tuy nhiên, một người dùng khác

16

Từ 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").

Vì vậy, ở đâu đó trong khởi tạo môi trường của bạn, hãy đặt:

SYSTEMD_PAGER=

Tốt đẹp. Điều tuyệt vời này là, việc cài đặt HỆ THỐNG HỆ THỐNG cũng ảnh hưởng đến các chương trình khác gọi systemctl! vì vậy bây giờ, service supervisor statusthể hiện hành vi tương tự.
Tim Kennedy

@Toby xin lỗi, nhưng tôi thích các trang của tôi trong các khối mã.
muru

3

Bạn cũng sẽ cần sửa đổi sudoerstệp của mình :

 Defaults        env_keep += "SYSTEMD_PAGER"

Đây là thông tin rất hữu ích .. đã bị kích thích vì thực tế là sau khi chuyển đổi HỆ THỐNG HỆ THỐNG, sudo systemctl status <service>vẫn được phân trang .. +1
Procyclinsur
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.