我在使用 C 中完成的守护程序时遇到问题,它读取标准输出 php 内容并将内容保存到文件中。该问题只发生在一个PHP脚本文件上,而另一个则不会。
如果我手动调用脚本,您通常会将内容写入标准输出。
在给出 fork 之后,我正在运行以下代码片段:
void startScriptCollector(char *php , char *collectorName , char *collectorRaw , char *collectorLog){
char str_script[80];
char str_raw[80];
char str_log[80];
int result = 0;
int fd_output , fd_error; //File Descriptor
setreuid(geteuid(), geteuid());
//stat_rtrim(collectorLog);
//removeChar(collectorLog,'\n');
if(collectorLog != NULL) trim(collectorLog);
tmLogPrintf(Log, TMLOG_LEVEL_ERROR , "On startScriptCollector collectorName : %s , collectorRaw : %s , collectorLog : %s...\n",
collectorName, collectorRaw , collectorLog);
//exit(-1);
sprintf(str_script , "%s/%s" , SLAVIEW_CUSTOM_SCRIPTS , collectorName);
sprintf(str_raw , "%s/%s" , SLAVIEW_CUSTOM_TMPCOL , collectorRaw);
sprintf(str_log , "%s/%s" , VARDIR , collectorLog);
fd_output = open(str_raw, O_CREAT | O_WRONLY , 0777);
fd_error = open(str_log, O_CREAT | O_WRONLY , 0777);
if(fd_output < 0){
tmLogPrintf(Log, TMLOG_LEVEL_ERROR , "Script %s not could save data in %s...\n",
collectorName , str_raw);
exit(-1);
}
if(fd_error < 0){
tmLogPrintf(Log, TMLOG_LEVEL_ERROR , "Script %s not could save error log ...\n",
collectorName);
//exit(-1);
}
dup2(fd_output , 1); //write on data file
dup2(fd_error , 2); //write on error file
result = execl(PHPEXEC , "php" , str_script , NULL);
if(result == -1){
tmLogPrintf(Log, TMLOG_LEVEL_ERROR , "Error, on execute script %s ...", collectorName);
exit(-1);
}
}
最佳答案
我发现了您给出错误的原因。这是 PHP 库的相对路径。或者我可以通过 c 或通过 PHP 以编程方式更改路径,一切都会得到修复!然后一个和我一起工作的 friend 添加了在 PHP 上测试的完整路径,脚本运行正常。
关于php - C execl 执行 PHP 脚本不在 STDOUT 中显示结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32747945/