본문 바로가기
개발 업무(코딩)-개발자였을때 썼던..

데몬 프로세스를 이용한 배치(batch)

by 주용사 2023. 1. 8.
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