본문 바로가기

KnowHow/Linux

Linux ( CentOS 혹은 Ubuntu 등 ) 에서 명령어를 백그라운드(Background)로 실행하기

작성자 : Deok


리눅스에서 간혹 특정 명령어 ( 고용량 다운로드, 데이터처리, 데이터 복구 등 )를 반나절 혹은 하루 이상 유지해야 할 때가 있는데요. 
이때 해당 명령어를 백그라운드(Background)에서 SSH 접속이 끊어지더라도 유지시키는 방법입니다.


일단 명령어를 <COMMAND>라고 했을 때 기본 사용방법은 아래와 같으며


$ nohup <COMMAND> 1>/dev/null 2>&1 &


예를 들어 보자면 대충 아래와 같이 사용하시면 됩니다.


$ nohup mysql -uroot -pPASSWORD DB_NAME < /data/backup/db_backup.sql 1>/dev/null 2>&1 &




간단히 설명드리면 


nohup

명령어를 로그아웃 된 상태에서도 유지하도록 해줍니다. 예를 들어 SSH로 접속하여 실행 후 접속이 끊어진다고 해도 명령어가 실행됩니다.


mysql -uroot -pPASSWORD DB_NAME < /data/backup/db_backup.sql 

후에 포스팅하겠지만 Mysql에 백업된 sql 파일을 넣는 명령어입니다. 용량에 따라 시간이 다르지만 보통 GB~TB 단위면 하루는 거뜬히 걸립니다... ( 자고 일어나면 되어있겠지 )


1>/dev/null

일반 출력을 /dev/null로 보내 버립니다. nohup 사용 시 nohup.out 이 생성되는데 이것을 생성되지 않게 합니다.


2>&1

에러 출력을 1로 보내 보내 버립니다. 1을 /dev/null로 보냈으니 똑같이 2 ( 에러 메시지 ) 도 /dev/null로 보내 버립니다. - 결론은 일반 메시지와 마찬가지로 출력이 되지 않도록 합니다.


&

명령어를 백그라운드에서 실행하도록 합니다. nohup 와 같게 생각할 수도 있는데 &의 경우 백그라운드로 실행하지만 nohup 가 없을 경우 접속이 끊어질 경우 명령어도 같이 종료 되게 됩니다.


즐거운 개발 & 운영 되시기 바랍니다.