들어가며:
우리가 ssh를 접속해서 무언가를 작업을 할때 세션이 타임아웃되서 실행중이던 작업이 종료될때가 있다. 그럼 정말 너무 화가 치밀어 오르며, 다시 접속을 한 뒤에 그전에 작업을 다시 실행한다. 그래서 ssh connection이 끊어져도 작업을 할 수 있는 방법을 찾아보니 nohup을 이용해서 하는 방법이 있다. nohup을 이용하면 결과적으로는 세션이 타임아웃이 되어도, 내가 실행한 작업은 백그라운드에서 계속 실행한다. nohup을 사용하는 방법은 아래와 같다.
nohub 사용하기:
$ nohup command 1>/dev/null 2>&1 &
위에서 사용하는 명령어에 대해서 이해를 하기 위해서는 아래 내용을 읽어보시기 바랍니다.
I/O Redirection:
bash와 다른 shell에서는 I/O redirection을 제공합니다. I/O는 3가지 표준스트림이 존재합니다. 쉽게 말하면 화면에 키보드로 입력하는 스트림, 스크린에 출력을 해주는 스트림, 에러를 출력하는 스트림이 존재합니다. 아래 내용은 키보드, 스크린에 입력하고 출력하는 스트림을 redirection하는 방법에 대해서 설명합니다.
I/O streams numbers :
- 표준입력(stdin): 0
- 표준출력(stdout): 1
- 표준에러(stderr): 2
1>/dev/null 이란?:
아래 명령어를 쉘에서 실행을 하면 ls -al의 결과가 result.log에 저장이 됩니다.
$ ls -al > result.log
$ ls -al 1>result.log
그렇다면 ls -al의 결과를 화면에 출력하기 싫으면 어떻게 할까요? 간단하게 화면에 출력되는 표준출력을 result.log에 저장하면 됩니다. 파일로도 남기기 싫다면? 그냥 바로 쓰레기통(/dev/null)에 넣어버리면 됩니다. 결과적으로 아래와 같이 입력하면 어떤 값도 화면에 출력되지 않습니다.
$ ls -al > /dev/null
$ ls -al 1>/dev/null
2>&1 이란? (stderr redirect to stdout):
아래와 같이 입력은 2번 표준에러 파일디스크립터를 1번 파일디스크립터로 redirection 라는 말입니다. 풀어 말하면 1번 표준출력을 /dev/null로 redirection을 했기 때문에, 2번 표준에러도 1번이 redirection하는 /dev/null로 redirection 해라 라는 말입니다. (2—> 1 —> /dev/null)
$ ls -al 2>&1
& 이란?:
&는 실행 작업을 백그라운드에서 실행하는 역할을 합니다. 결과적으로는
$ nohub command 1>/dev/null 2>&1
위 실행을 &(백그라운드)로 보낸다. 입니다. 결과적으로는 로그아웃/세션 타임아웃이 되어도 실행된 커맨드의 화면출력 결과를 /dev/null로 버리고, 에러메시지도 화면에 출력하지 않습니다.
'운영체제 > Linux' 카테고리의 다른 글
[Linux] Shared Directory (0) | 2018.10.20 |
---|---|
[Linux] Error: rpmdb open failed 해결방법 (0) | 2016.11.08 |
[Linux] 대량의 파일 옮기는 방법: Argument list too long의 문제 해결하는 방법 (0) | 2016.11.08 |
[Linux] 스토리지 추가하기 (포맷하기, 마운트하기) (0) | 2016.10.13 |
[Linux] SSH key 생성 및 패스워드 없이 로그인하기 (2) | 2016.08.19 |