运行使用stdin的cron作业

时间:2014-02-04 12:25:30

标签: linux select cron file-descriptor

我有一个使用select轮询stdin文件描述符的进程,当我从控制台运行它时工作正常。在cron下添加此流程后,我看到输出表明在select下使用stdin调用cron时出现问题。有没有办法在使用cron时解决这个问题并让进程认为有一个stdin文件描述符什么都没有收到?

1 个答案:

答案 0 :(得分:0)

所以我做的是检查/ proc / self / fd / 0,如果它不是/ dev / pts /,我跳过select命令。使用类似的东西检查你的fd 0

bool rc = true;
char linkName[256];
const char* fd0 = "/proc/self/fd/0";
const char* devPts = "/dev/pts";
struct stat sb;
lstat(fd0, &sb);
readlink(fd0, linkName, sb.st_size + 1);
linkName[sb.st_size] = '\0';
if (strncmp(linkName, devPts, sizeof(devPts)) != 0)
{
    std::cout << "The application's stdin file descriptor doesn't point to /dev/pts/XXX, input will be ignored" << std::endl;
    rc = false;
}
return rc;