Используете ли вы другой порт, чем по умолчанию?
Предполагаю, что fail2ban читает / etc / services, и в этом файле ваш ssh указан как 22.
Нет необходимости многократно запускать ps для перечисления всех процессов и grep через выход. Обозначьте процесс с помощью ctrl-Z, затем запустите
bg %1 ; wait %1 ; shutdown -h now
Если у вас есть другие фоновые задания, тогда вам будет предоставлен другой параметр jobs, а не [1], когда вы ctrl-z. Если это так, используйте это вместо.
Вы можете сделать что-то вроде этого, которое проверит, будет ли процесс работать каждые 5 секунд и предпримет соответствующие действия:
while true; do
if ps -ef | grep -q '[l]ong-running-process'; then
sleep 5
else
sudo poweroff
fi
done
Обратите внимание на квадратные скобки в выражении grep. Это делается для того, чтобы процесс grep не соответствовал, если он попадает в список ps. Достаточно окружения любого символа с квадратными скобками.
Если вы знаете 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
Я делаю это все время.
Запустите процесс. Поймите, что я забыл сделать свою команду &&. Нажмите Ctrl + Z, чтобы приостановить процесс и вернуться в оболочку. Запустите fg && shutdown -h now в: Передний план и возобновите процесс, который вы только что приостановили. Затем, после завершения, он будет запускать то, что вы хотите запустить.В качестве альтернативы вы можете опросить, как предложено в других ответах:
while ps -p $PID ; do sleep 5 ; done ; shutdown -h now
Создайте сценарий оболочки для запуска обоих процессов:
MyShellScript.txt:
#!/bin/sh
MyProcessIdLikeToStart -o options && shutdown -h now
После сохранения в каталоге, в котором вы запускаете данный процесс, выполните: [ ! d2]
chmod +x MyShellScript.txt
Затем, когда вы хотите запустить команду, просто введите ./MyShellScript.txt, и она сделает это для вас.