我编译了一个.c文件,想通过cron作业运行,但我最终得到了这个错误:
/bin/sh: /usr/local/bin/get1Receive.c: Permission denied.
导致此错误的原因是什么?如何解决?
我应该在cron中运行.c
文件还是在不同的编译文件中运行?
/ 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
文件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
代码片段。
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));
答案 0 :(得分: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提供 LINE 和 func 。示例:
printf("error on line %d in my code %s, error message =%s\n", __LINE__, __func__, [string of error message]);
如果您没有检查返回代码,那么您编写的C代码非常差。
请立即检查退货代码!
答案 1 :(得分:1)
许可证明你可以有两个问题。 1.'c'文件的权限不允许您运行它的人运行它。 2.您正在使用没有权限的脚本运行cron。
这是一篇有用的帖子:How to give permission for the cron job file?
您正在运行'c'文件并将其称为脚本这一事实使我认为您正在使用C shell而不是将其编写为需要编译并生成可执行文件的C语言程序由cron运行。如果您没有使用gcc或从未在“C”脚本上调用gcc,那么它不是C并将其称为C shell以避免混淆。