【发布时间】:2020-09-01 15:01:59
【问题描述】:
上下文:
我正在重试系统上开发嵌入式 openwrt,用于 http 请求和证书权限检查。
我们不信任我们的网络服务器,并希望每天重试 GET HTTP 文件,直到下载为止。
我们还想在准确的时间下载文件。
在正常时间,节目是:
- 管理 LED 状态和网络状态
- 从消息队列接收消息以执行 Web 请求和网络管理
- 它监控其他 2 个进程,一个蓝牙和一个可能崩溃的 Zigbee。
- 当我们投入生产时,它可能会做其他事情。
有问题:
我想每天用 C 编写一个信号来获取异步事件。所以我基本上想要没有 crontab 的 crontab。
我要使用的信号是IPC中使用的信号(我不知道在linux上创建异步行为的其他方法):https://www.man7.org/linux/man-pages/man7/signal.7.html
我知道如何使用 crontab,但我更喜欢用 C 语言来做所有事情,因为对于不使用 linux 的同事来说,这会让我的架构更简单。
-
据我所知,crontab 没有 C api。
-
我在代码中使用了计时器,但它们似乎不适合这种用法:https://man7.org/linux/man-pages/man2/timer_create.2.html 从系统请求日期和时间并创建一个计时器以在每天所需的时间触发应该是可行的,但我认为在 Linux 上可能已经有了解决方案。类似 eventHour(hour, signal, handler)。
-
我没有 systemd https://linuxconfig.org/how-to-schedule-tasks-with-systemd-timers-in-linux
问题:在 Linux 上用 C 语言获取每日/周期信号的正确方法是什么?
非常感谢,
【问题讨论】:
-
为什么计时器不能满足您的需求?
-
从系统请求日期和时间并创建一个计时器以在每天所需的时间触发应该是可行的,但我认为在 Linux 上可能已经有了解决方案。类似 eventHour(hour, signal, handler)。
-
不,没有内置任何东西。这就是
cron通常的用途,而不是连续运行程序并等待到达时间。 -
@Damezumari 请不要在 cmets 中回答,edit 您的问题并在那里添加所需的信息。您问题中的“信号”一词是否指
kill发送的信号?如果是,请添加有关您要发送到哪个进程的信号的详细信息。如果没有,请更详细地说明您每天/定期要做什么? -
@Bodo 据我正确理解问题,用户不确定信号是否可以用于他的用例。因此,他不能添加任何细节。