로그아웃 후에도 프로세스 유지하기
터미널에서 로그아웃한 후에도 프로세스가 계속 실행되어야 할 때가 있습니다. 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은 표준 출력 (stdout) 과 표준 에러 (stderr) 를 모두 리다이렉션합니다. 이렇게 하면 백그라운드 프로세스가 터미널을 어지럽히지 않고 조용히 실행됩니다.
프로세스가 실행 중인지 확인할 수 있습니다:
ps aux | grep persistent-task.sh
그리고 출력 파일을 살펴볼 수 있습니다:
cat persistent-output.log
출력에는 지속 작업의 시작 시간과 반복 횟수가 표시됩니다.
disown 명령어
로그아웃 후에도 프로세스를 유지하는 또 다른 방법은 disown 명령어를 사용하는 것입니다. 먼저 프로세스를 백그라운드에서 실행합니다:
cd ~/project
./persistent-task.sh &
그런 다음 disown을 사용하여 터미널과의 연결을 끊습니다:
disown %1
이제 터미널을 닫아도 이 프로세스는 계속 실행됩니다.
이러한 명령어들은 연결을 끊은 후에도 작업이 계속되어야 하는 원격 서버 작업 시 필수적입니다.