Crontab을 이용한 로컬 자동화 프로그램 만들기

주제 : C스크립트 컴파일 → 로그인에 사용된 리소스 로그 저장 자동화

1. 현재 돌아가고 있는 터미널의 이름 찾기

image “/dev/pts/0이 터미널의 이름이다.”

2. 로그인에 사용할 리소스 정보를 출력하는 C스크립트 작성

#include <stdio.h>
#include <stdlib.h>
#include <utmp.h>
#include <sys/types.h>
#include <sys/time.h>

void main(){

        struct utmp *ut;

        printf("\\n");

        printf("프로세스 실행\\n");

        while((ut=getutent()) != NULL){
                printf("로그인장치:%s\\n", ut->ut_line);
                printf("사용자명 : %s\\n", ut->ut_user);
                printf("프로세스 ID : %s\\n",ut->ut_id);
                printf("프로세스 타입 :%d\\n",ut->ut_type);
        }

}

3. 배시 쉘 스크립트 작성

#!/bin/bash  
#배시 사용 선언
echo ""
echo "excute C compile" 
gcc -o ccl_test ccl_test.c #컴파일을 수행
echo "success"

컴파일 수행 성공 또는 실패 시 출력하는 문구가 다르게 조건 분기를 추가해야 할 거 같다.

4.Crontab으로 스케쥴링

MAILTO="" #postfix가 메일을 보내는 걸 차단/디스크 과부하 방지
0 11 * * * /home/ubuntu/ccl/ccl_test.sh > /dev/pts/0 
#자동으로 폴더에 있는 ccl_test.c를 컴파일 하고
#성공했다는 문자를 출력
0 12 * * * /home/ubuntu/ccl/ccl_test > /home/ubuntu/ccl/ccl_test.log
#컴파일 된 ccl_test를 실행시켜, 로그인에 사용한 리소스를 log파일에 갱신

테스트용으로 임의의 시간을 지정해 줌.

결과

  • Crontab 실행 시

콘솔 화면

image

로그 파일 결과

image

트러블 슈팅

배시쉘 내에서 C스크립트를 실행시키면, C스크립트 내부의 출력문이 나오지 않아서, C스크립트를 또 따로 Crontab에 스케쥴링을 해야 하는 문제가 있었다.