본문 바로가기

Python

[python] 파이썬 스크립트 백그라운드 수행 (linux)

반응형

 

파이썬 프로그램을 백그라운드로 지속적으로 수행해야 하는 경우가 있습니다. 이번 포스트에서 파이썬을 백그라운드로 돌리는 여러가지 방법에 대해 알아봅시다.

 

 

단순히 마지막에 &을 붙히는 방법

보통 리눅스에서는 맨 마지막에 &을 붙힘으로써 백그라운드 수행을 할 수 있습니다.

# python test.py &
[1] 7115
# jobs
[1]+  Running                 python test.py &

 

하지만 위 방법의 단점은 해당 쉘 또는 터미널이 끊기게 되면 파이썬 job도 사라지게 됩니다. 이렇게 되면 터미널을 통해 명령어를 수행하다가 time out이 걸리게 되면 python job도 사라지게 됩니다. 이를 위해 리눅스에서는 nohup 이라는 명령어를 제공합니다.

 

 

nohup을 통해 데몬 형태로 실행하기

nohup은 no hangup 의 준말로 '프로세스 중단이 없다'라는 의미의 명령어입니다. 리눅스에서  쉘을 데몬 형태로 실행하기 때문에 세션이 끊겨도 스크립트를 백그라운드에서 수행할 수 있게 해줍니다. 참고로 해당 명령어를 수행하려면 대상 스크립트의 파일 권한이 755 이상이어야 합니다.

 

root@lim:~# nohup python test.py &
[1] 7338
root@lim:~# nohup: ignoring input and appending output to 'nohup.out'

마지막에 nohup 명령어를 치면 nohup.out에 아웃풋을 출력한다는 문구가 있네요. 실제로 디렉터리에 보니 nohup.out 로그 파일이 있고 실제로 tail -f 명령어로 로그를 볼 수 있습니다.

 

root@lim:~# tail -f nohup.out

하지만 로그가 실시간으로 출력되지 않습니다. 실시간 출력을 위해서는 -u 옵션을 통해서 실시간 로그 출력을 할 수  있습니다.

 

 

nohup에 python -u 옵션 추가하여 실시간 로그 출력

root@lim:~# nohup python -u test.py &
[1] 7642
root@lim:~# nohup: ignoring input and appending output to 'nohup.out'

root@lim:~# tail -f nohup.out
0
1
2

 

 

 

로그 파일 지정 출력

 

nohup.out 파일말고 특정 로그 파일을 지정하여 출력할 수도 있다. 이때는 리눅스의 redirection(>) 기능을 활용합니다.다. 참고로 > 가 한 개일떄는 해당 파일의 처음부터 로그를 다시 입력하게 되고, >> 두 개일때는 기존 내용에 추가하여 로그를 기록합니다. 

 

root@lim:~# nohup python -u test.py > log.log &
[1] 7642
root@lim:~# nohup: ignoring input and appending output to 'nohup.out'

root@lim:~# tail -f log.log
0
1
2

 

반응형