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