0

I have a .c file compiled and would like to run via a cron job but I end up getting this error:

/bin/sh: /usr/local/bin/get1Receive.c: Permission denied. 

What is causing this error and how do I fix it?

Should I be running the .c file in cron or a different compiled file?

Results from /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

Results from file get1Receive.c

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

Snippet of codes.

sprintf(queryBuf1,"SELECT ipDest, macDest,portDest, sum(totalBits) FROM dataReceive WHERE timeStampID between '%s' And '%s'  GROUP BY ipDest, macDest, portDest ",buff1,buff2);
                printf("\nQuery receive %s",queryBuf1);


                if(mysql_query(localConn, queryBuf1))
                {
                    //fprintf(stderr, "%s\n", mysql_error(localConn));
                    printf("Error in first query of select %s\n",mysql_error(localConn));
                    exit(1);
                }

                localRes1 = mysql_store_result(localConn);
                int num_fields = mysql_num_fields(localRes1);

                printf("\nNumf of fields : %d",num_fields);
                printf("\nNof of row : %lu",mysql_num_rows(localRes1));
4

2 回答 2

3

如果此命令的输出:

file  get1Receive1.c

表明该文件名是一个有效的可执行文件,该部分非常不寻常,但还可以。

假设您使用的是 biz14(或您的真实用户名)crontab,请尝试以下操作:

使用命令crontab -e 在您的 crontab 中创建此行:

* * * * *  set > /tmp/myvars

等待几分钟,返回crontab -e并删除该条目。

使用命令行中的 set 命令查看存在哪些变量和别名。将其与您在/tmp/myvars 您必须通过更改 cron 作业运行的变量和别名来更改 C 代码的执行方式中看到的进行比较。

如果您在其他人的 crontab 中运行 cron 作业,那么您将遇到更大的问题。检查 get1Receive1.c 上的文件权限。以及它所在的目录。其他用户(赢得 crontab 的用户)必须在您的目录和 get1Receive1.c 上设置权限,以便作业可以运行。

crontab 条目示例:

0 10 * * 1-5 /path/to/get1Receive1.c > /tmp/outputfile

阅读/tmp/outputfile,看看你得到了什么。您printf在代码中使用。 printf只写入控制终端。没有控制终端,因此将printf内容重定向到文件。

这个问题的最后努力:检查一切的返回码。所有 C 函数,如 fread()、任何 db 函数等。如果返回码给出失败响应(对于不同的函数调用,这些响应是不同的)然后报告错误号、行号和函数 - gcc 提供LINEfunc。例子:

printf("error on line %d in my code %s, error message =%s\n", __LINE__, __func__, [string of error message]);

如果您不检查返回代码,您将编写非常糟糕的 C 代码。

请检查返回码,现在!

于 2013-03-12T14:14:38.650 回答
1

许可明智你可能有两个问题。1. 'c' 文件的权限不允许你运行它的人来运行它。2. 您正在使用没有权限的脚本运行 cron。

这是一个有用的帖子:如何授予 cron 作业文件的权限?

您正在运行“c”文件并将其称为脚本的事实使我认为您正在使用 C shell 而不是将其编写为需要编译并由生成的可执行文件运行的 C 语言程序克朗。如果您没有使用 gcc 或从未在您的“C”脚本上调用 gcc,那么它不是 C,而是将其称为 C shell 以避免混淆。

于 2013-03-12T14:14:13.393 回答