我们有一个由C程序控制的远程设备。这个程序经常失败,所以我们想引入一些监控。要么程序崩溃并退出,要么发生一些错误,程序没有响应。我们想设置一个cron任务或其他一些脚本来进行监控。C程序和bash脚本或cron之间通信的最佳现代实践是什么?我们有这个C程序的源代码,所以我们可以引入某种错误消息/事件。它们是否应该被写入一个文件,稍后由cron或其他监控脚本解析-或者这种方法已经过时了,有一些API或Linux消息传递系统用于通信是这样的情况吗?
zzzyeukh1#
作为一个简单的变体,使用看门狗。程序定期写入一个指定的文件。如果文件在足够长的时间内没有更新,程序没有响应,你应该杀死并重新启动它。当然,最好的解决方案是修复导致崩溃或无响应的问题。您应该有足够的日志记录,以便能够准确地确定何时何地出错。也许还要确保有一个可用于崩溃的核心转储,以便您可以调试它。
r55awzrz2#
最简单的方法是让你的程序(用任何语言写的)在每次成功完成任务时接触一个特定的文件(即创建它而不向它写入任何东西)。然后你可以让一个监控程序检查文件的存在以及它的时间戳是多久。Monit可以很容易地做到这一点,或者你可以写一个shell脚本在cron作业中完成这一点。
8ehkhllq3#
如果你是在Linux / unix的变体上,那么你可以在脚本中的一个循环中使用“ps”命令来监视你的程序是否还在运行。你可以使用ps的-C选项。另一种方法是写一个新的C程序,然后这个C程序应该派生一个子进程,这个子进程将运行你原来的C程序,然后在父进程中你可以调用wait()。wait()将在子进程退出时返回。所以,你将知道子进程何时退出,然后你可以采取适当的行动。
3条答案
按热度按时间zzzyeukh1#
作为一个简单的变体,使用看门狗。程序定期写入一个指定的文件。如果文件在足够长的时间内没有更新,程序没有响应,你应该杀死并重新启动它。
当然,最好的解决方案是修复导致崩溃或无响应的问题。您应该有足够的日志记录,以便能够准确地确定何时何地出错。也许还要确保有一个可用于崩溃的核心转储,以便您可以调试它。
r55awzrz2#
最简单的方法是让你的程序(用任何语言写的)在每次成功完成任务时接触一个特定的文件(即创建它而不向它写入任何东西)。然后你可以让一个监控程序检查文件的存在以及它的时间戳是多久。Monit可以很容易地做到这一点,或者你可以写一个shell脚本在cron作业中完成这一点。
8ehkhllq3#
如果你是在Linux / unix的变体上,那么你可以在脚本中的一个循环中使用“ps”命令来监视你的程序是否还在运行。你可以使用ps的-C选项。
另一种方法是写一个新的C程序,然后这个C程序应该派生一个子进程,这个子进程将运行你原来的C程序,然后在父进程中你可以调用wait()。wait()将在子进程退出时返回。所以,你将知道子进程何时退出,然后你可以采取适当的行动。