¿Puedo evitar que el "estado de servicio foo" pagine su salida a través de "menos"?

35

¿Cómo detiene el service <name> statususo del comando lessen su salida?

Tengo un script que automatiza algunas acciones de sysadmin, y después de actualizar mi servidor a Ubuntu 16.04, se rompe porque las acciones que verifican el estado del servicio están bloqueando porque está usando algo como lessmostrar la salida, específicamente el supervisorservicio.

Tengo varios demonios configurados para ejecutarse, y cuando lo ejecuto sudo service supervisor status, obtengo:

* 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

Y no regresa hasta que me desplazo manualmente hacia abajo o presiono Qpara salir. ¿Cómo desactivo esta función?

Cerin
fuente

Respuestas:

54

Ubuntu es un sistema systemd, donde el service statuscomando realmente llama systemctl status, y systemctl tiene una --no-pageropción que hace exactamente lo que estás buscando. Por lo tanto, es mejor que utilice el comando systemctl directo en su secuencia de comandos.

sudo systemctl --no-pager status supervisor

EDITAR: env var SYSTEMD_PAGER

Otra forma, como lo señaló @jwodder, es establecer la variable de entorno SYSTEMD_PAGER. Esto tiene el beneficio adicional de afectar también la salida de systemctlcuando es llamado por otra aplicación como service.

export SYSTEMD_PAGER=''
sudo service supervisor status

Le permitirá lograr el mismo resultado.

Tim Kennedy
fuente
2
Me gustaría sugerir poner la opción antes del comando:sudo systemctl --no-pager status supervisor
Jeff Schaller
editado para que coincida con su sugerencia. Es bueno seguir el uso previsto de las herramientas. Gracias.
Tim Kennedy
2
"Ubuntu es un systemdsistema" ... cuando Upstart no está en uso, es decir
cat
66
Para que systemctlsiempre se comporte como --no-pagerse da, puede establecer la SYSTEMD_PAGERvariable de entorno en cualquiera de catlas cadenas o vacías.
jwodder
@jwodder: la configuración de SYSTEMD_PAGER tiene la ventaja adicional de afectar también la salida systemctlincluso cuando se llama por service. Agradable.
Tim Kennedy
34

less normalmente desactivará su modo de buscapersonas si detecta que su salida no es un terminal. Entonces, puede intentar hacer que la salida de su comando no sea un terminal ejecutando algo como:

sudo service supervisor status | cat
dhag
fuente
44
Esta respuesta es buena porque es genérica. La respuesta de Tim Kennedy es buena porque es específica para systemctl. Voté a ambos.
Kamil Maciorowski
Estaba a punto de eliminar mi respuesta a favor de la otra, pero veo cómo el conocimiento genérico puede ser valioso. Para el registro, creo que la otra respuesta debería ser la que se acepte.
dhag
Siempre elegiré la respuesta más genérica, todas las demás cosas son iguales. Esto es exactamente lo que haría en RHEL si el comando de back-end fuera lessy no quisiera ese comportamiento. Por supuesto, si estuviera haciendo esto en una secuencia de comandos que explota algo como la línea "Activa:", ya no iría a la terminal, y este problema ni siquiera existiría.
Monty Harder
No está lessapagando nada. No está systemctlinvocando un buscapersonas en primer lugar cuando su salida estándar no es una terminal.
JdeBP
@MontyHarder además del hecho de que probablemente no deberías extraer la línea Active: porque solo puedes verificar el código de salida del estado de systemctl (realmente deberías usar systemctl show en un script en lugar de estado) o systemctl es- {activo, fallido} , que le dirá sin ninguno de estos análisis BS :)
Sin embargo, otro usuario
16

De 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").

Entonces, en algún lugar de la inicialización de su entorno, establezca:

SYSTEMD_PAGER=
muru
fuente
Agradable. ¡Lo bueno de eso es que la configuración SYSTEMD_PAGER también afecta a otros programas que llaman systemctl! así que ahora, service supervisor statusexhibe el mismo comportamiento.
Tim Kennedy
@Toby lo siento, pero prefiero mis páginas de manual en bloques de código.
muru
3

También deberá modificar su sudoersarchivo:

 Defaults        env_keep += "SYSTEMD_PAGER"
JalapeñoGremlin
fuente
Esta es una información muy útil ... se estaba irritando por el hecho de que después de cambiar el SYSTEMD_PAGER, sudo systemctl status <service>todavía estaba localizado ... +1
Procyclinsur