1

我有一个 C++ 程序,它需要安排未来的各种进程以一次性启动。

开发是在 Linux 中进行的,因此显而易见的选择是使用“at”命令;我对编写自己的作业调度程序不感兴趣!

但是我不愿意从我的程序中派生一个操作系统进程来直接调用“at”可执行文件——因为这很麻烦,而且很麻烦。

使用 cron,我知道您可以将作业作为文件写入 /etc/cron.d,而无需分叉到 crontab。然而,“at”似乎不存在这样的设施。

一些研究使我得出结论,我可以使用共振峰 axxxxxyyyyyyyy 将文件简单地写入 /var/spool/cron/atjobs 其中 x=job id 和 y = 十六进制纪元时间(以分钟为单位) - 但这似乎不符合精神Linux 安全性或约定....加上文件名格式不能在所有 *nix 系统中移植,如果我希望使用另一个操作系统。

当然,我可以使用 cron,但它不能明智地满足一次性工作,所以这也不是一个好的解决方案。我也不想获取这些工具的源代码并将必要的部分重新加工到我的程序中——这也不是完全可移植的。

所以我的问题是 - 如果我想在给定的时间和日期安排未来作业的执行以进行单次运行,任何人都可以建议一种编程方式“很好”的方式来直接连接“at”或 cron 守护程序,而无需分叉到C++ 中的操作系统 .... 还是有其他提供此功能的标准工具?

4

3 回答 3

1

at 命令似乎是做事的好方法。为什么不编写凌乱的代码并继续处理更重要的问题。

于 2011-05-24T14:17:21.313 回答
0

Phil,我建议您将工作规范直接写入 atjobs 目录的想法是实现目标的最优雅的编程方式。这就是“at”命令所做的事情(可以使用 strace 在排队作业时跟踪“at”进程,需要超级用户权限!)。

您相信 cron spool 目录的位置是可变的的依据是什么?根据我的经验,这样的文件系统路径通常非常可靠。与此规则的唯一显着不同是“etc”目录,它高度依赖于系统,但仅在基于 redhat 和基于 debian 的系统之间。

说了这么多,您可能会咬掉相当复杂的工作块以获得值得怀疑的回报(特别是对于作业文件的格式)。当然,作为一项技术练习,它有很多优点,但如果我正在做这个@work,我会简单地使用 c“系统”函数调用。

system("at -f test.py '18:30' today");
于 2011-05-28T17:42:43.037 回答
0

纯 c 或 c++ 方法是检查当前时间,并查看作业是否过期,当您派生一个进程并执行应用程序时(很可能与系统一起执行)。

于 2011-05-24T14:11:01.937 回答