1. Jupyter Notebook 커널 목록 확인 및 종료 스크립트 작성
Jupyter Notebook 서버가 실행 중인 상태에서, 모든 커널을 종료하는 Python 스크립트를 작성합니다. 예를 들어 `shutdown_kernels.py`라는 이름의 스크립트를 생성합니다:
```python
import requests
from notebook import notebookapp
def shutdown_all_kernels():
# Jupyter 서버 정보를 가져옵니다.
servers = list(notebookapp.list_running_servers())
for server in servers:
token = server['token']
url = server['url']
# 커널 목록을 가져옵니다.
response = requests.get(f'{url}api/kernels', params={'token': token})
kernels = response.json()
# 각 커널을 종료합니다.
for kernel in kernels:
kernel_id = kernel['id']
requests.delete(f'{url}api/kernels/{kernel_id}', params={'token': token})
if __name__ == '__main__':
shutdown_all_kernels()
```
이 스크립트는 현재 실행 중인 Jupyter 서버의 모든 커널을 종료합니다.
2. Cron 작업 설정
이제 위 스크립트를 특정 시간에 실행하도록 cron 작업을 설정합니다.
2.1. 스크립트 저장
스크립트를 예를 들어 `/home/username/shutdown_kernels.py` 경로에 저장합니다. 이때 `username`을 실제 사용자 이름으로 변경합니다.
2.2. Cron 작업 추가
터미널을 열고 `crontab -e` 명령을 실행하여 crontab 편집기를 엽니다. 예를 들어, 매일 밤 11시에 모든 커널을 종료하도록 설정하려면 다음 줄을 추가합니다:
```cron
0 23 * * * /usr/bin/python3 /home/username/shutdown_kernels.py
```
위 명령에서 `/usr/bin/python3`는 Python 실행 파일의 경로이며, `shutdown_kernels.py`는 스크립트의 경로입니다. 경로는 시스템 환경에 따라 다를 수 있으므로 적절히 변경해야 합니다.
2.3. Crontab 저장 및 종료
편집기를 종료하고 변경 사항을 저장하면 crontab이 자동으로 업데이트됩니다.
3. 추가 설정
만약 Jupyter 서버가 특정 가상 환경에서 실행 중이라면, 해당 환경을 활성화한 후 스크립트를 실행하도록 cron 작업을 설정해야 합니다. 예를 들어, `conda` 가상 환경을 사용하는 경우:
```bash
0 23 * * * source /home/username/anaconda3/bin/activate myenv && /home/username/anaconda3/envs/myenv/bin/python /home/username/shutdown_kernels.py
```
이렇게 설정하면 매일 밤 11시에 Jupyter 서버의 모든 커널이 종료되며, 사용하지 않는 메모리가 반환됩니다. cron 작업이 제대로 설정되었는지 확인하려면 `crontab -l` 명령을 사용하여 현재 cron 작업 목록을 확인할 수 있습니다.