Cómo cancelar el siguiente trabajo en orden después de rsync

Cómo cancelar el siguiente trabajo en orden después de rsync

Si se ingresan dos trabajos en la línea de comando de bash separados por punto y coma:

$ job 1; job 2;

¿Cómo cancelo el segundo? Si presiono CTRL+ c, el primero se cancelará y se iniciará el 'trabajo 2', solo quiero detener el segundo trabajo para que no se ejecute. Intenté atq, ps pero no tuve suerte, con ps -ef solo puedo ver 'trabajo 1' pero 'trabajo 2' no aparece en la lista, por lo que no puedo hacer que PID use kill. Sé que puedo usar && en lugar de ; pero ya es demasiado tarde. Ejecuté este comando por accidente en mi servidor en lugar de en la PC de mi casa y ahora estoy tratando de descubrir cómo evitar un desastre.

Este problema es específico del comando rsync seguido de otro comando:

$ rsync ..... ; sudo shutdown -h now

Matar el proceso por ID o matar a su padre no funcionará.

Después de varias horas de pruebas, lo aislé en rsync, otros comandos puedo terminar con CTRL+ cen varios órdenes, pero no si son después de algunos comandos como rsync o ping, probé diferentes versiones de Ubuntu, kernels y servidores sin usuario sudo. y podría reproducirlo en todas partes, la mejor manera de evitar este problema es usar && después de rsync para ejecutar el siguiente comando solo en el código de salida exitoso 0:

$ rsync .... && job 2

Respuesta1

Mata elproceso padrede trabajo1 con SIGKILL.

Mostrar los procesos en un árbol de procesos, por ejemplo. con htopo ps axfy matar alproceso padre de job1y no el trabajo1 en sí.


Instalar htopcon

sudo apt-get install htop

Votantes negativos, comprendan la respuesta antes de votar en contra

Respuesta2

Creo que te pierdes algo. Cuando ejecutas dos comandos separados por, ;puedes eliminar ambos comandos con CTRL+ c.

Sólo para estar seguro prueba este comando:

find / -name a ; ls /home

Luego elimine los comandos anteriores con CTRL+ c, esto eliminaría ambos procesos, no incluirá el contenido de su inicio. Es decir, el siguiente comando no se ejecutará.


ACTUALIZAR:Esto también será válido para tu rsyncmando. Aquí mi ejemplo:

$ rsync -avz /var/cache/apt/archives/ /tmp/backups/ ; sudo shutdown -h now

sending incremental file list
created directory /tmp/backups
./
authbind_1.2.0build3_amd64.deb
................
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(549) [sender=3.0.9]
[sudo] password for user: 

Entonces, como ve arriba, cuando ejecuta CTRL+ c, esto elimina el primer comando y, al iniciar el apagado, le pedirá su sudocontraseña, por lo que ahora puede finalizar el segundo proceso usando CTRL+ cnuevamente.


Actualización 2Como truco para el problema, puedes hacer:

  • ya que usa sin contraseña sudo, vuelva a sudosolicitar la contraseña editando su archivo sudoersudo visudo
  • Como paso final si nada más funcionay solo un truco y no es aconsejableedite el /sbin/shutdowncomando para eliminarlo +xo simplemente cámbiele el nombre a un nombre diferente.

información relacionada