Запуск процессов после выхода из системы
Иногда вам нужно, чтобы процесс продолжал работать даже после выхода из терминала. Команда nohup позволяет запустить команду, которая будет продолжать работать даже после выхода из оболочки.
Давайте создадим скрипт, который будет работать долго:
cd ~/project
nano persistent-task.sh
Добавьте следующее содержимое:
#!/bin/bash
## This script runs for a very long time
echo "Starting persistent task at $(date)" > persistent-output.log
for i in {1..100}; do
echo "Iteration $i at $(date)" >> persistent-output.log
sleep 10
done
echo "Persistent task completed at $(date)" >> persistent-output.log
Сохраните и выйдите из nano, затем сделайте скрипт исполняемым:
chmod +x persistent-task.sh
Теперь запустите его с помощью nohup и переведите в фоновый режим:
nohup ./persistent-task.sh &
Вы увидите вывод, похожий на следующий:
[1] 5678
nohup: ignoring input and appending output to 'nohup.out'
Это означает, что процесс выполняется в фоновом режиме и будет продолжаться, даже если вы выйдете из системы. Вывод, который обычно направляется в терминал, перенаправляется в файл с именем nohup.out.
Совет по управлению выводом: Если вы не хотите, чтобы вывод фонового процесса появлялся в вашем терминале и потенциально мешал вашей работе, вы можете перенаправить вывод в файл:
## Перенаправить вывод в конкретный файл
./long-task.sh > task-output.log 2>&1 &
## Или перенаправить в /dev/null, чтобы полностью отбросить вывод
./long-task.sh > /dev/null 2>&1 &
2>&1 перенаправляет как стандартный вывод, так и вывод ошибок. Таким образом, фоновый процесс выполняется бесшумно, не загромождая ваш терминал.
Вы можете проверить, выполняется ли процесс:
ps aux | grep persistent-task.sh
И вы можете просмотреть файл вывода:
cat persistent-output.log
Вывод показывает время начала и итерации постоянной задачи.
Команда disown
Другой способ поддерживать запущенные процессы после выхода из системы — использовать команду disown. Сначала запустите процесс в фоновом режиме:
cd ~/project
./persistent-task.sh &
Затем используйте disown, чтобы отсоединить его от терминала:
disown %1
Теперь этот процесс будет продолжать работать, даже если вы закроете терминал.
Эти команды необходимы при запуске задач на удаленных серверах, где вам нужно, чтобы процессы продолжали работать после отключения.