[리눅스] crontab에서 사용자 이름 때문에 작업을 수행하지 못하는 문제

  리눅스에서 crontab은 시킴말(명령어)과 예약 시간을 미리 넣어 두어 제때에 작업을 수행하게 한다. crontab에는 작업을 수행하지 못했다면 전자 우편으로 알려 주는 기능이 있다. 다음은 문제가 있을 때에 받을 수 있는 편지이다.

제목 : Cron <root@​host> root run-parts /etc/cron.​hourly
내용 : /bin/bash: root: command not found

  위 편지는 /etc/cron.hourly에 등록된 작업들을 실행하지 못했음을 알리고 있다. crontab에 등록한 작업 목록의 형식이 잘못되어 있으면 이런 편지가 자꾸 올 수 있다.

  이럴 때에 crontab -e로 본 작업 목록은 다음과 같은 꼴일 것이다.

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

  흔히 알려진 crontab 등록 형식은 '분 시 날 달 요일 해 사용자 시킴말'이다.주1 위 작업 목록이 /etc/crontab 파일에 담겨 있다면, 'crontab /etc/crontab'으로 작업 목록을 crontab에 넣을 때는 문제가 없다. 파일로 작업 목록을 넣을 때는 각 작업을 수행하는 서로 다르게 할 수 있다.

  하지만 'crontab -e'로 편집할 때는 crontab이 지금 접속한 사용자를 예약 작업을 올리는 사용자로 여긴다. 그래서 사용자 이름을 뺀 '분 시 날 달 요일 해 시킴말' 꼴로 넣어야 한다. 사용자 이름(root)이 들어가면 crontab이 사용자 이름을 시킴말로 받아들이므로, 리눅스는 그런 시킴말을 찾을 수 없다고 알린다.

  crontab -e로 넣는 작업 목록은 아래처럼 사용자 이름(root)을 빼야 한다.

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * run-parts /etc/cron.hourly
02 4 * * * run-parts /etc/cron.daily
22 4 * * 0 run-parts /etc/cron.weekly
42 4 1 * * run-parts /etc/cron.monthly

〈주석〉
  1. 해(연도)는 꼭 들어가야 하는 항목이 아니어서 거의 넣지 않는다. back
글 걸기 주소 : 이 글에는 글을 걸 수 없습니다.

덧글을 달아 주세요