본문 바로가기

OS/Linux

Linux - Crontab에서 Command Not Found 오류 해결

728x90

리눅스에서 crontab을 통해 주기적으로 명령어를 실행하려 할 때, 특정 명령어를 찾지 못해 "command not found" 오류가 발생하는 경우가 있습니다. 이는 crontab의 기본 PATH 설정이 제한적이기 때문인데요, 기본적으로 /usr/bin 등 제한된 경로만 인식하기 때문에 다른 경로에 설치된 프로그램이나 도구는 찾지 못하는 경우가 발생합니다. 이 글에서는 Python, Node.js 등 다양한 도구를 crontab에서 원활히 실행하기 위한 PATH 설정 방법을 알아보겠습니다.

 

Crontab을 모른다면?

 

Linux - Crontab (크론탭)

Crontab 1. cron이란 : 일정시간마다 프로그램을 자동으로 실행시키는 데몬입니다. (Windows 의 작업스케줄러와 유사함) 2. crond 설정 크론(cron)의 설정은 /etc/crontab에서 합니다. (모든 계정으로 관리해야

samso.tistory.com

 

 


문제 상황: Crontab에서 "Command Not Found" 오류가 발생하는 이유

crontab은 기본적으로 /usr/bin, /bin 등의 경로만 포함합니다. 하지만 많은 프로그램이 /usr/local/bin, /usr/local/sbin, 또는 /home/user/.local/bin 등에 설치되고, crontab은 이를 찾지 못해 명령어를 실행하지 못하고 오류가 발생합니다.

예시 1: Python 스크립트

Python 스크립트를 실행하려고 할 때도 마찬가지입니다.

* * * * * python3 /samso_script.py

Python이 /usr/local/bin에 설치된 경우, crontab은 Python 경로를 찾지 못해 python3: command not found 오류가 발생할 수 있습니다.

예시 2: Node.js 도구 (http-server)

* * * * * http-server /path/to/directory

Node.js 기반 도구 http-server도 /usr/local/bin에 위치해 있으면, crontab이 이를 찾지 못해 오류가 발생합니다.

 


해결 방법: Crontab에 PATH 직접 설정하기

crontab에 직접 필요한 경로를 포함한 PATH 설정을 추가해 주면 됩니다.

이를 통해 crontab이 다양한 경로에 설치된 명령어를 인식할 수 있게 됩니다.

설정 방법

  1. 터미널에서 crontab -e 명령어를 입력해 crontab 편집기를 엽니다.
  2. 편집기 상단에 PATH 변수를 추가하여 필요한 경로들을 모두 포함시킵니다.
# 필요한 PATH 경로를 crontab에 추가
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin:/home/user/.local/bin
LD_LIBRARY_PATH=/usr/local/lib

# 명령어 스케줄 설정 예시
# Python 스크립트 실행 (매 분마다 실행)
* * * * * python3 /path/to/my_script.py

# Node.js 기반 프로그램 실행 (매 분마다 실행)
* * * * * /usr/local/bin/http-server /path/to/directory

추가된 경로 설명

  • /usr/local/bin: 사용자 설치 프로그램 경로. Python, Node.js 등 일반적으로 이 경로에 설치됩니다.
  • /usr/local/sbin: 시스템 관리 프로그램 경로로, sudo 명령어로 설치한 시스템 도구들이 위치할 수 있습니다.
  • /home/user/.local/bin: 사용자가 pip이나 npm 등을 통해 설치한 프로그램이 위치하는 경로입니다.

PATH에 경로를 추가하여 crontab이 해당 경로의 프로그램을 인식할 수 있게 되어 "command not found" 오류를 방지할 수 있습니다.


설정 적용 후 확인 방법

설정을 저장한 후, crontab이 정상적으로 명령어를 실행하는지 확인하려면 다음과 같은 방법을 사용할 수 있습니다.

  1. 로그 파일 확인: /var/log/cron 또는 /var/log/syslog 파일에서 crontab 실행 로그를 확인할 수 있습니다.
  2. 스크립트에서 로그 출력: 스크립트에 로그 출력 기능을 추가하여 실행 결과를 파일로 남기는 방법도 있습니다.
    예를 들어, aws s3 ls > /path/to/log.txt 2>&1처럼 로그 파일로 출력되도록 할 수 있습니다.

 

728x90
반응형