Mysql在cron上select查询不生成结果,但通过terminal可以

我们有一个C程序(来源如下)。 我们编译它:

gcc -Wall -Wextra -g $(mysql_config --cflags) get1ReceiveSource.c $(mysql_config --libs) -lrt -o get1Receive 

当使用./get1Receive在terminal上运行时,select会给出完美的结果。 我们使用cron条目每分钟转到cron作业的那一刻

 /1 * * * * /usr/local/bin/get1Receive >> /var/log/myalert1.log 2>&1 

我只是不能看到它得到任何结果。 我已经debuged使用gdb ,它完美的罚款,我已经设置了断点,一步一步,我可以看到它进入循环太好。 我也附加了env值,我怀疑mysql有问题吗? 有什么想法吗?

C代码:

 #include <stdlib.h> #include <unistd.h> #include <pthread.h> #include <stdio.h> #include <time.h> #include <sys/time.h> #include <signal.h> #include <mysql.h> #include <string.h> #include <syslog.h> #define SMALLSIZE 20; int main () { openlog("get1recieve",LOG_PID|LOG_PERROR,LOG_LOCAL0); time_t now = 0; time(&now); syslog(LOG_INFO, "started at %s", ctime(&now)); syslog (LOG_INFO, "Program started by User %d", getuid ()); MYSQL *localConn; MYSQL_RES *localRes1; MYSQL_ROW localRow1; char *server = "localhost"; char *user = "user1"; char *password = "****"; char *database = "test1"; localConn = mysql_init(NULL); if (!mysql_real_connect(localConn, server, user, password, database, 0, NULL, 0)) { // fprintf(stderr, "%s\n", mysql_error(localConn)); syslog(LOG_ERR, "failed to connect to MySQL : %s", mysql_error(localConn)); exit(EXIT_FAILURE); //exit(1); } struct timeval tv; char queryBuf1[512]; char buff1[20] = {0}; char buff2[20] = {0}; gettimeofday (&tv, NULL); //fprintf (stderr, "[%d.%06d] Flag set to 1 on ", tv.tv_sec, tv.tv_usec); //tv.tv_sec -= 5; strftime(buff1, 20, "%Y-%m-%d %H:%M:00", localtime(&tv.tv_sec)); strftime(buff2, 20, "%Y-%m-%d %H:%M:59", localtime(&tv.tv_sec)); printf("\nTime from %s", buff1); printf("\nTime to %s", buff2); fflush(NULL); if (snprintf(queryBuf1, sizeof queryBuf1, "SELECT ipDest, macDest, portDest, sum(totalBits)" " FROM dataReceive" " WHERE timeStampID between '%s' And '%s' " " GROUP BY ipDest, macDest, portDest ", buff1, buff2) >= (int) (sizeof queryBuf1)) abort(); syslog (LOG_INFO, "querybuf %s at line %d", queryBuf1, __LINE__); if(mysql_query(localConn, queryBuf1)) { printf("Error in first query of select %s\n",mysql_error(localConn)); exit(1); } localRes1 = mysql_use_result(localConn); //localRes1 = mysql_store_result(localConn); int num_fields = mysql_num_fields(localRes1); if (!localRes1) syslog(LOG_PERROR, "loop# mysql useresult failure %s", mysql_error(localConn)); printf("\nNumf of fields : %d",num_fields); printf("\nNof of row : %lld",mysql_num_rows(localRes1)); while((localRow1 = mysql_fetch_row(localRes1)) !=NULL) { printf("TEST"); } fflush(NULL); mysql_free_result(localRes1); mysql_close(localConn); closelog (); return 0; } 

我们已经运行这个命令文件get1Receive并导致

 file get1Receive get1Receive: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped 

我们也运行这个命令* * * * * set> / tmp / myvars,结果如下。

 GROUPS=() HOME=/root HOSTNAME=capture HOSTTYPE=x86_64 IFS=' ' LOGNAME=root MACHTYPE=x86_64-redhat-linux-gnu OPTERR=1 OPTIND=1 OSTYPE=linux-gnu PATH=/usr/bin:/bin POSIXLY_CORRECT=y PPID=11086 PS4='+ ' PWD=/root SHELL=/bin/sh SHELLOPTS=braceexpand:hashall:interactive-comments:posix SHLVL=1 TERM=dumb UID=0 USER=root _=/bin/sh 

我在这里也看到类似的东西 …不是在跑?

你可以试试:

/ 1 * * * * / bin / bash -c'/ usr / local / bin / get1Receive >> /var/log/myalert1.log 2>&1'

看看它是否有效?