【问题标题】:Running cron job which uses stdin运行使用标准输入的 cron 作业
【发布时间】:2014-02-04 12:25:30
【问题描述】:

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

【问题讨论】:

  • 我们希望看到一些代码,以便更好地猜测。
  • 我从here 获取了代码,但我不得不承认这段代码在控制台和cron 上运行良好。我想这是我的代码的一个问题,但只是为了确保,在运行需要cron 下的标准输入文件描述符的进程时是否存在已知问题? (显然不会与进程交互)
  • 我建议你查看stackoverflow.com/tags/crontab/info 中的crontab 指南并尽量让你的问题更简洁,不要假装别人打开链接,检查完整代码然后返回建议。

标签: linux select cron file-descriptor


【解决方案1】:

所以我所做的是检查/proc/self/fd/0,以防它不是/dev/pts/something 我跳过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;

【讨论】:

    猜你喜欢
    • 2020-01-22
    • 1970-01-01
    • 2013-07-02
    • 2014-11-02
    • 1970-01-01
    • 2013-07-24
    相关资源
    最近更新 更多