Как отменить следующее задание по порядку после rsync

Как отменить следующее задание по порядку после rsync

Если в командной строке bash введены два задания, разделенные точкой с запятой:

$ job 1; job 2;

Как мне отменить второе задание? Если я нажму CTRL+ c, первое будет отменено и запустится «задание 2», я просто хочу остановить второе задание, чтобы оно не выполнялось. Я пробовал atq, ps, но безуспешно, с ps -ef я вижу только «задание 1», но «задание 2» не указано, поэтому я не могу получить PID для использования kill. Я знаю, что могу использовать && вместо ;, но теперь слишком поздно, я случайно запустил эту команду на своем сервере вместо своего домашнего ПК, и теперь я пытаюсь понять, как предотвратить катастрофу.

Эта проблема характерна для команды rsync, за которой следует другая команда:

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

Уничтожение процесса по идентификатору или уничтожение его родителя не сработает.

После нескольких часов тестирования я изолировал ее от rsync, другие команды я могу завершить с помощью CTRL+ cв разном порядке, но не если они идут после некоторых команд, таких как rsync или ping. Я пробовал разные версии Ubuntu, ядра, сервер без пользователя sudo, и мне удавалось воспроизвести проблему везде. Лучший способ избежать этой проблемы — использовать && после rsync, чтобы выполнить следующую команду только в случае успешного завершения с кодом 0:

$ rsync .... && job 2

решение1

Убейродительский процессиз job1 с SIGKILL.

Показать процессы в дереве процессов, например, с помощью htopили ps axfи завершитьродительский процесс job1а не сама работа1.


Установить htopс помощью

sudo apt-get install htop

Проголосовавшие против, поймите ответ, прежде чем голосовать против

решение2

Мне кажется, вы что-то упускаете. Когда вы запускаете две команды, разделенные знаком «+», ;вы можете завершить обе команды, нажав CTRL«+» c.

Просто чтобы убедиться, попробуйте эту команду:

find / -name a ; ls /home

Затем завершите вышеуказанные команды с помощью CTRL+ c, это завершит оба процесса, вы не увидите список своего домашнего контента. То есть, следующая команда не будет запущена.


ОБНОВЛЯТЬ:Это также будет справедливо для вашей rsyncкоманды. Вот мой пример:

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

Итак, как вы видите выше, когда вы запускаете CTRL+ c, это убивает первую команду, и при запуске шудауна она запросит у вас sudoпароль, поэтому теперь вы можете убить второй процесс, снова нажав CTRL+ c.


Обновление 2В качестве решения проблемы вы можете сделать следующее:

  • так как вы используете passwordless, sudoто снова заставьте вас sudoзапрашивать пароль, отредактировав файл sudoersudo visudo
  • Как последний шаг, если ничего не помогаети просто хак и это не желательноотредактируйте /sbin/shutdownкоманду, чтобы удалить +xее или просто переименуйте ее в другое имя.

Связанный контент