
Introducción
Recientemente actualicé a Fedora 17 y me estoy acostumbrando al nuevo systemctl
administrador de demonios versus los scripts de inicio de shell.
Una característica que necesito en algunos de mis demonios es la capacidad deinteractuar con sus consolasporque los apagados sucios no iniciados por el proceso en sí pueden causar daños en la base de datos. Por lo tanto, realizar una, systemctl stop service-name.service
por ejemplo, podría provocar una pérdida irreversible de datos.
Estas consolas leen la entrada del usuario a través de stdin o métodos similares, por lo que lo que he estado haciendo en mi antiguo sistema operativo es colocar esos demonios en primer plano en una screen
sesión, ysuspendidoesa sesión de pantalla con ^A ^z
. También vale la pena señalar que ahora hice systemctl
esto automáticamente si la computadora se reinicia, pero aún así no resuelve mi posible problema de corrupción de datos que estoy tratando de evitar.
Mi pregunta
¿Existe alguna forma de utilizarlo systemctl
para interactuar directamente con la consola de procesos que genera? ¿Puedo conectar un proceso systemctl
para obtener acceso a su consola?
Gracias
Ustedes siempre dan excelentes respuestas, ¡así que recurro a ustedes!
Respuesta1
Parece que podrías redirigirlo a un tty.
StandardInput=
Controla dónde está conectado el descriptor de archivo 0 (STDIN) de los procesos ejecutados. Toma uno de null, tty, tty-force, tty-fail o socket. Si se selecciona nulo, la entrada estándar se conectará a /dev/null, es decir, todos los intentos de lectura del proceso darán como resultado un EOF inmediato. Si se selecciona tty, la entrada estándar se conecta a un TTY (según lo configurado por TTYPath=, ver más abajo) y el proceso ejecutado se convierte en el proceso de control del terminal. Si el terminal ya está siendo controlado por otro proceso, el proceso ejecutado espera hasta que el proceso de control actual libere el terminal.tty-force es similar a tty, pero el proceso ejecutado se convierte de manera contundente e inmediata en el proceso de control de la terminal, eliminando potencialmente los procesos de control anteriores de la terminal.tty-fail es similar a tty pero si el terminal ya tiene un proceso de control, el inicio del proceso ejecutado falla. La opción socket solo es válida en servicios activados por socket, y solo cuando el archivo de configuración del socket (consulte systemd.socket(5) para más detalles) especifica un solo socket. Si se configura esta opción, la entrada estándar se conectará al socket desde el que se activó el servicio, lo cual es principalmente útil para la compatibilidad con demonios diseñados para usarse con el demonio tradicional inetd(8). Esta configuración por defecto es nula.
Ah, y si eso no funciona, haremos algo realmente complicado con sockets Unix que estoy seguro que sabrás.amar.
Al diablo con esas tonterías, prueba algo como esto si lo anterior no es aceptable:
Podrías intentar escribir en su directorio /proc pid. Digamos que el pid de tus demonios es 2000, intenta escribir en /proc/2000/fd/0
Podrías agregar esa línea a ExecStop=, lo que te libera de tener que interactuar manualmente.