728x90
기존에 소스코드를 이용해서 만들었다.(블로그 내에 있는 소스)
배치를 관리하는 테이블을 따로 만들어서 그 시간이 되면 알아서 배치가 돌아간다.
배치의 진행은 curl로 데이터를 txt파일로 떨구고 parsing이라는 함수에 들어가 테이블 스키마에 맞게 데이터를 insert해준다.
중간에 잘안됐는데 그 이유는
chdir("/")에 있었다. 경로를 루트로 설정해버리기 때문이다. 기존 소스에서는 상대경로로 들어갔었다. 절대경로로 맞췄더니 잘돌아간다.
위의 오류를 해결하고 나니깐 데몬프로세스가 강제종료되는 현상도 없어졌다.
int main(int argc, char *argv[])
{
int ret;
int pid;
MYSQL *conn_ptr;
conn_ptr = db_init("ip", "id", "pwd", "databasename");
pid = fork();
printf("pid = [%d] \n", pid);
if(pid < 0){
printf("fork Error... : return is [%d] \n", pid );
perror("fork error : ");
exit(0);
}else if (pid > 0){
printf("child process : [%d] - parent process : [%d] \n", pid, getpid());
exit(0);
}else if(pid == 0){
printf("process : [%d]\n", getpid());
}
signal(SIGHUP, SIG_IGN);
chdir("/");
setsid();
open("/dev/null", O_RDWR);
int cnt = 0;
while(1)
{
sleep(40);
MYSQL_RES *sql_result;
MYSQL_ROW row;
char query[1024];
memset(query, 0x00, sizeof(query));
sprintf(query, "SELECT BATCHNAME FROM MYBATCH WHERE batchstart = DATE_FORMAT(NOW(), '%%i');");
mysql_query(conn_ptr, query); // query를 사용할때..select이든 뭐든
sql_result = mysql_store_result(conn_ptr); // mysql실행시 결과를 저장
//printf("%s\n" , query);
if(row=mysql_fetch_row(sql_result))
{
Curl("kospi"); // 실행
Curl("kosdaq"); // 실행
Parsing(conn_ptr, "kospi"); // 실행
Parsing(conn_ptr, "kosdaq"); // 실행
printf("success\n");
}
else
{
//printf("fail\n");
}
mysql_free_result(sql_result);
}
}
728x90
'개발 업무(코딩)-개발자였을때 썼던..' 카테고리의 다른 글
리눅스 소스&디렉토리 백업 쉘 (0) | 2023.01.08 |
---|---|
여러 언어의 온라인 컴파일 가능 사이트 (0) | 2023.01.08 |
crontab 크론탭(배치, batch) (0) | 2023.01.08 |
c와 mariadb auto commit off / on (0) | 2023.01.08 |
c와 mariadb INSERT시에 한글 깨짐 현상 (0) | 2023.01.08 |