Linux 시스템에서 crontab으로 등록하면 반복적인(스케쥴링) 작업을 할 수 있습니다. 하지만 crontab이 실행되는 계정이 sudo(root) 권한이 없기 때문에 sudo 권한이 필요한 작업은 추가로 몇 가지 작업이 필요합니다.

별도의 shell 로 작성

뒤쪽에서 설명할 것 처럼, 권한 처리를 shell 파일에 주는 것이 안전하기 때문에 별도의 shell 에서 하고자 하는 작업(sudo 권한 필요)을 하게끔 정의합니다.

#/bin/sh
LOGFILE="/Users/criss/dev/work/crontab-log/mtu-$(date +%F).crontab.log"

/sbin/ifconfig utun4 mtu 1320

CUR_DATE=$(date)
UTUN4_VAL=$(/sbin/ifconfig | grep utun4)
echo "$CUR_DATE > $UTUN4_VAL" >> "$LOGFILE" 2>&1

위 내용에서 ifconfig 명령어가 sudo 권한을 요구한다.

shell을 sudo권한으로 실행해도 password를 묻지 않도록 수정

위 shell 을 crontab 에 등록하기 이전에, sudo 권한으로 실행 시, 비밀번호 입력 없이도 실행이 가능하도록 변경해줘야 한다.

sudo visudo

위 명령어로 sudo 권한을 조정하는 화면을 불러오고,

criss ALL=(ALL) NOPASSWD: /Users/criss/dev/work/mtu.sh

를 맨 마지막줄에 추가하여 해당 파일이 비밀번호 입력 없이 실행 가능하도록 한다.

crontab에 등록

이제 아래 명령어로 crontab 수정화면을 불러오고,

sudo crontab -u criss -e

아래와 같이 crontab 을 등록하면 됩니다.

@reboot sudo /Users/pc00079589/dev/work/mtu.sh
*/1 * * * * sudo /Users/pc00079589/dev/work/mtu.sh

(추가) 로그 파일 주기적으로 삭제

0 0 * * * find /Users/criss/dev/work/crontab-log -name "*.crontab.log" -mtime +7 -exec rm {} \\;

출처 및 참고자료

  • Chat GPT

Leave a comment