没有crontab怎么每天发一个信号?

How can I send a signal every day without crontab?

上下文:

我正在重试系统上开发嵌入式 openwrt,用于 http 请求和证书强制检查。

我们不信任我们的 Web 服务器,希望每天重试 GET HTTP 文件,直到下载完成。

我们还想在精确的时间下载文件。

在正常时间,节目是:

有问题:

我想每天用C语言编写一个信号来获取异步事件。所以我基本上想要没有 crontabs 的 crontab。

我想使用的信号是 IPC 中使用的信号(我不知道在 linux 上创建异步行为的其他方法):https://www.man7.org/linux/man-pages/man7/signal.7.html

我知道如何使用 crontab,但我更喜欢用 C 来做所有事情,因为它会让我的架构对于不使用 linux.

的同事来说更简单

问题:在 Linux 上用 C 语言获取 dayly/periodic 信号的正确方法是什么?

非常感谢,

I don't know other way to create asynchronous behaviors on Linux

Linux 本身似乎不支持与您想要的类似的东西。

要在特定时间执行特定操作,必须在后台启动某些程序并 运行 直到执行该操作。如果要循环执行操作,则程序必须永久 运行ning。

使用 crontab 的优点是只有一个程序 (cron) 在后台运行 运行 即使您的 [=11= 中有数百个不同的操作也是如此].但是,有一个程序 (cron) 运行永久在后台运行。

systemd也是如此。

如果您不想使用此类工具,您的程序必须 运行 永久处于后台。

timer_create

如果您需要相当高的精度(例如小于一秒),可以使用此方法。

如果你不需要高精度并且你不想要 cron 或类似的,我会做这样的事情:

seconds_per_day = 60*60*24;
next_time = time(NULL) + seconds_per_day;
while(1)
{
    usleep(5000000);
    if(time(NULL) >= next_time)
    {
        perform_action();
        next_time += seconds_per_day;
    }
}

示例中我使用usleep()等待5秒。使用更长的时间(例如 10 秒)将减少您的程序 运行 在后台消耗的 CPU 功率 - 并使您触发操作的确切时间点更加不精确。

该示例仅每 24 小时触发一次操作。

但是,您可以使用相同的原理在特定时间触发某些动作(例如11:30pm)或在不同时间触发多个动作...