리눅스 쉘스크립트#1 크론 탭(Cron tab)
Crontab을 이용한 로컬 자동화 프로그램 만들기
주제 : C스크립트 컴파일 → 로그인에 사용된 리소스 로그 저장 자동화
1. 현재 돌아가고 있는 터미널의 이름 찾기
“/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 실행 시
콘솔 화면
로그 파일 결과
트러블 슈팅
배시쉘 내에서 C스크립트를 실행시키면, C스크립트 내부의 출력문이 나오지 않아서, C스크립트를 또 따로 Crontab에 스케쥴링을 해야 하는 문제가 있었다.