web-dev-qa-db-fra.com

Comment annuler le prochain travail dans l'ordre après rsync

Si deux travaux sont entrés dans la ligne de commande bash séparés par un point-virgule:

$ job 1; job 2;

Comment annuler le deuxième? Si j'appuie CTRL+c, le premier sera annulé et le "travail 2" commencerait, je veux juste arrêter le deuxième travail pour ne pas l'exécuter. J'ai essayé atq, ps mais pas de chance, avec ps -ef je ne vois que 'job 1' mais 'job 2' n'est pas listé, donc je ne peux pas obtenir de PID pour utiliser kill. Je sais que je peux utiliser && au lieu de; mais il est trop tard maintenant, j'ai exécuté cette commande par accident sur mon serveur au lieu de mon ordinateur personnel et maintenant j'essaie de comprendre comment éviter une catastrophe.

Ce problème est spécifique à la commande rsync suivie d'une autre commande:

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

Tuer le processus par ID ou tuer son parent ne fonctionnera pas.

Après plusieurs heures de test, je l'ai isolé pour rsync, d'autres commandes avec lesquelles je peux terminer CTRL+c dans divers ordres, mais pas s'ils sont après certaines commandes comme rsync ou ping, j'ai essayé différentes versions d'Ubuntu, noyaux, serveur sans utilisateur Sudo et je pourrais le reproduire partout, le meilleur moyen d'éviter ce problème est d'utiliser && après rsync pour exécuter commande suivante uniquement en cas de succès exitcode 0:

$ rsync .... && job 2
2
Mike

Je pense que vous manquez quelque chose, lorsque vous exécutez deux commandes séparées par ; vous pouvez tuer les deux commandes par le CTRL+c.

juste pour être sûr d'essayer cette commande:

find / -name a ; ls /home

Tuez ensuite les commandes ci-dessus avec CTRL+c, cela tuerait les deux processus, vous ne répertorierez pas le contenu de votre page d'accueil. C'est-à-dire que la prochaine commande ne s'exécutera pas.


PDATE: Ceci sera également valable pour votre commande rsync. Voici mon exemple:

$ 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: 

Donc, comme vous le voyez ci-dessus, lorsque vous exécutez CTRL+c, cela tue la première commande et au démarrage de shudown, il vous demandera votre mot de passe Sudo, vous pouvez donc maintenant tuer le deuxième processus en utilisant CTRL+c encore.


pdate 2 En tant que hack de problème, vous pouvez faire:

  • puisque vous utilisez sans mot de passe Sudo puis refaites votre Sudo demande de mot de passe en éditant votre fichier sudoer Sudo visudo
  • Comme dernière étape si rien d'autre ne fonctionne et juste un hack et ce n'est pas conseillé éditez le /sbin/shutdown commande pour supprimer +x ou renommez-le simplement sous un autre nom.
3
Maythux

Tuez le processus parent de job1 avec SIGKILL.

Afficher les processus dans un arbre de processus, par exemple. avec htop ou ps axf et tue le processus parent de job1 et non job1 lui-même.


Installez htop avec

Sudo apt-get install htop

Downvoters, comprendre la réponse avant de downvoter

4
A.B.