Tag Archives: shopt

Unix Nohup을 이용해서 로그아웃 후에도 유지되는 쉘 스크립트 실행하기

Unix나 Linux 시스템에서 &나 bg 명령을 사용하여 백그라운드 프로세스로 실행할 때 세션이 종료된 이후에는 일반적으로 프로세스가 종료될 것입니다. 하지만 이것을 피할 수 있는 몇가지 방법이 있습니다. 가령 nohup을 이용하여 명령을 실행하거나 at, batch, cron등을 이용하여 원하는 명령을 반복 실행되도록 할 수 있습니다.

여기서는 nohup을 이용하여 당신이 터미널을 종료한 이후에도 프로세스가 유지되도록 하는 방법에 대해 짧게 알아보겠습니다.

여기서 nohup이라함은 No Hang Up의 의미를 갖으며 아래와 같은 방법으로 사용할 수 있습니다.

$ nohup command-with-options &

Nohup은 쉘스크립트를 실행할 때나 종료까지 매우 오래걸리는 명령을 실행할 때 유용합니다. 이런 경우 명령이 완료될 때 까지 쉘에 연결하고 기다리는것이 어려울 수 있습니다. 하지만 nohup을 이용하면 쉘을 종료한 이후에도 당신의 작업을 지속시킬 수 있습니다.

nohup.out 파일에 대해

기본적으로 명령의 표준출력(Standard Output)은 같은 디렉토리의 nohup.out 파일로 리다이렉트 됩니다. 그리고 표준에러(Standard Error)는 표준출력으로 리다이렉트됩니다. 결과적으로 nohup 명령을 사용할 때 당신의 nohup.out 파일은 표준출력과 표준에러 메시지 모두 기록되게 됩니다.

표준출력과 표준에러를 모두 출력하는 예제 스크립트를 만들어보았습니다. 1>&2는 표준출력을 표준에러로 리다이렉트 시킨다는 의미를 가집니다.

while(true)
do
  echo "standard output"
  echo "standard error" 1>&2 
  sleep 1;
done

스크립트를 별도의 리다이렉트 없이 실행하면 다음과 같은 결과를 확인하실 수 있습니다.

$ nohup sh custom-script.sh &
[1] 12034
$ nohup: ignoring input and appending output to `nohup.out'

$ tail -f nohup.out
standard output
standard error
standard output
standard error
..

다른 로그 파일로 리다이렉트를 구현하면 다음과 같은 결과를 볼 수 있습니다. 표준에러마저 정상적으로 리다이렉트 되고 있는것을 확인하실 수 있습니다.

$ nohup sh custom-script.sh > custom-out.log &
[1] 11069
$ nohup: ignoring input and redirecting stderr to stdout

$ tail -f custom-out.log
standard output
standard error
standard output
standard error
..