Как добавить к уже запущенному процессу дополнительную команду «shutdown»?

Используете ли вы другой порт, чем по умолчанию?

Предполагаю, что fail2ban читает / etc / services, и в этом файле ваш ssh указан как 22.

10
задан 30 January 2012 в 08:08

5 ответов

Нет необходимости многократно запускать ps для перечисления всех процессов и grep через выход. Обозначьте процесс с помощью ctrl-Z, затем запустите

bg %1 ; wait %1 ; shutdown -h now

Если у вас есть другие фоновые задания, тогда вам будет предоставлен другой параметр jobs, а не [1], когда вы ctrl-z. Если это так, используйте это вместо.

10
ответ дан 25 May 2018 в 14:45

Вы можете сделать что-то вроде этого, которое проверит, будет ли процесс работать каждые 5 секунд и предпримет соответствующие действия:

while true; do
  if ps -ef | grep -q '[l]ong-running-process'; then
    sleep 5
  else
    sudo poweroff
  fi
done

Обратите внимание на квадратные скобки в выражении grep. Это делается для того, чтобы процесс grep не соответствовал, если он попадает в список ps. Достаточно окружения любого символа с квадратными скобками.

3
ответ дан 25 May 2018 в 14:45
  • 1
    +1, так как он работает. Не так, как я бы это сделал. – Zoke 30 January 2012 в 08:44
  • 2
    @Zoke: Если есть другой способ, мне было бы интересно. – Scott Severance 30 January 2012 в 08:54
  • 3
    Добавлено ответ. Проверьте это, если хотите. – Zoke 30 January 2012 в 08:56
  • 4
    Вы также можете использовать kill -0 (pid), чтобы проверить существование процесса, не убивая его. – fluffy 30 January 2012 в 12:15

Если вы знаете pid, вы можете запустить это:

while ps -p $PID; sleep 5; done; shutdown -h now

Чтобы запустить без эха из ps, выполните следующее:

while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now

И, наконец, запустите его в фоновом режиме без какого-либо вывода:

(while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now ) &

Решение Скотта является хорошим, но это снова устраняет необходимость grep, если вы уже знаете pid. И это намного быстрее ввести.: P

1
ответ дан 25 May 2018 в 14:45

Я делаю это все время.

Запустите процесс. Поймите, что я забыл сделать свою команду &&. Нажмите Ctrl + Z, чтобы приостановить процесс и вернуться в оболочку. Запустите fg && shutdown -h now в: Передний план и возобновите процесс, который вы только что приостановили. Затем, после завершения, он будет запускать то, что вы хотите запустить.

В качестве альтернативы вы можете опросить, как предложено в других ответах:

while ps -p $PID ; do sleep 5 ; done ; shutdown -h now
0
ответ дан 25 May 2018 в 14:45

Создайте сценарий оболочки для запуска обоих процессов:

MyShellScript.txt:

#!/bin/sh
MyProcessIdLikeToStart -o options && shutdown -h now

После сохранения в каталоге, в котором вы запускаете данный процесс, выполните: [ ! d2]

chmod +x MyShellScript.txt

Затем, когда вы хотите запустить команду, просто введите ./MyShellScript.txt, и она сделает это для вас.

0
ответ дан 25 May 2018 в 14:45

Другие вопросы по тегам:

Похожие вопросы: