我在C#中运行了一个应用程序(在嵌入式XP上运行的2.0),它与作为Windows服务实现的"监视程序"进行通信.设备启动时,此服务通常需要一些时间才能启动.我想从我的代码中检查服务是否正在运行.我怎么能做到这一点?
所以我试图建立一个cron作业作为我创建的守护进程的监视器.如果守护进程出错并失败,我希望cron作业定期重启...我不确定这是多么可能,但我通读了几个cron教程,找不到任何可以做到的东西我我正在寻找......
我的守护进程是从shell脚本启动的,所以我真的只是在寻找一种方法来运行一个cron作业,如果该作业的上一次运行还没有运行的话.
我找到了这篇文章,它确实提供了我正在尝试使用锁文件做的解决方案,而不是我不确定是否有更好的方法来做...
谢谢你的帮助.
伙计们,我需要查看日志文件以进行更改.在查看了stackoverflow问题之后,我看到人们推荐"看门狗".所以我正在尝试测试,并且不确定在文件更改时添加代码的位置:
#!/usr/bin/python
import time
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler
if __name__ == "__main__":
event_handler = LoggingEventHandler()
observer = Observer()
observer.schedule(event_handler, path='.', recursive=False)
observer.start()
try:
while True:
time.sleep(1)
else:
print "got it"
except KeyboardInterrupt:
observer.stop()
observer.join()
Run Code Online (Sandbox Code Playgroud)
如果文件已被添加/更改,我在哪里添加"得到它",在while循环中?
现在我遇到了关于Linux NMI Watchdog的问题.我想使用Linux NMI看门狗来检测和恢复操作系统挂起.所以我将"nmi_watchdog = 1"添加到grub.cfg.然后检查/ proc/interrupt,每秒触发NMI.但是在我加载了一个带死锁的模块(双获取自旋锁)之后,系统完全挂起,什么也没发生(从不恐慌!).看起来nmi看门狗不起作用!
然后我读了Documantation/nmi_watchdog.txt,它说:
请注意,使用本地APIC时,它产生的NMI中断频率取决于系统负载.当地的APIC NMI监管机构缺乏更好的资源,使用" 周期无 ""事件.
什么是" 周期无恙 "事件?
它补充道
但是如果你的系统锁定了除"hlt"处理器指令之外的任何东西,监视器将很快触发,因为"循环无关"事件将在每个时钟滴答时发生...如果它锁定在"hlt",那么你就出局了好运 - 事件根本不会发生,看门狗不会触发.
似乎看门狗在处理器执行"hlt"指令时不会触发,然后我在" Intel 64和IA-32架构软件开发人员手册,Volumn 2A "中搜索"hlt ",它描述如下:
停止指令执行并将处理器置于HALT状态.启用的中断(包括NMI和SMI),调试异常,BINIT#信号,INIT#信号或RESET#信号将恢复 执行.
然后我输了......
我的问题是:
我的操作系统是Ubuntn 10.04 LTS,Linux-2.6.32.21,CPU Pentium 4双核3.20 GHz.
我没有阅读关于nmi看门狗的全部源代码(没时间),如果我无法理解nmi看门狗是如何工作的,我想用性能监控计数器中断和处理器间中断(由APIC提供)来代替发送NMI nmi看门狗.
有人能帮助我吗?谢谢.
我需要一些方法来监视桌面应用程序并在它死亡时重新启动它.
最初我假设最好的方法是从Windows服务监视/重启进程,直到我发现Vista Windows服务不应该与桌面交互
我已经看到了几个处理这个问题的问题,但是我看到的每一个答案都涉及到某种被微软劝阻的黑客攻击,可能会在未来的操作系统更新中停止工作.
因此,Windows服务可能不再是一个选项.我可能只是创建一个不同的桌面/控制台应用程序来做到这一点,但这种方式失败了.
在您看来,哪种方式最优雅?
编辑:这既不是恶意软件也不是病毒.需要监控的应用程序是一个可以在嵌入式系统上运行的媒体播放器,即使我试图涵盖所有可能的崩溃情况,我也不会冒着因意外错误而崩溃的风险(不会发生) .这个看门狗只是一个安全措施,万一其他一切都出错了.此外,由于播放器将显示第三方Flash内容,因此增加的优势将是监视资源使用情况,并重新启动播放器,如果说,一些蹩脚的Flash电影开始泄漏内存.
编辑2:我忘了提到,我想要监视/重启的应用程序完全不需要在LocalSystem帐户上运行,也不需要任何管理权限.实际上,我更喜欢它使用当前记录的用户凭据运行.
我试图检测何时在目录中创建具有给定名称的文件.我正在这样做,感谢看门狗.正确检测到创建但我不知道如何在检测完成后正确终止应用程序.
我的代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import sys
import time
from watchdog.events import FileSystemEventHandler
from watchdog.observers import Observer
logging.basicConfig(level=logging.ERROR)
class MyEventHandler(FileSystemEventHandler):
def __init__(self, observer, filename):
self.observer = observer
self.filename = filename
def on_created(self, event):
print "e=", event
if not event.is_directory and event.src_path.endswith(self.filename):
print "file created"
self.observer.unschedule_all()
self.observer.stop()
def main(argv=None):
path = argv[1]
filename = argv[2]
observer = Observer()
event_handler = MyEventHandler(observer, filename)
observer.schedule(event_handler, path, recursive=False)
observer.start()
observer.join()
return 0
if __name__ == "__main__": …
Run Code Online (Sandbox Code Playgroud) 嗨,任何人都可以告诉我如何处理Linux中的软件看门狗.我有一个程序"SampleApplication",它持续运行,如果它意外挂起或关闭我需要重新启动它.
我正在谷歌上搜索这个,发现linux在/ dev/watchdog有看门狗,但不知道如何使用它.有人可以帮我举个例子.
我的问题是在哪里指定我的应用程序名称和延迟间隔以重新启动.由于我是linux的新手,请尽可能向我介绍样品.谢谢
我有一个运行2.6内核的处理器AT91SAM9G20.看门狗在引导级别启用并配置为16秒.看门狗模式寄存器只能配置一次.当代码在引导程序,引导程序或内核中挂起时,该板将重新启动.但是一旦内核出现,即使看门狗没有在任何应用程序中刷新,板也不会在16秒后重置,而是15分钟.
谁在刷新看门狗?
在我们的例子中,看门狗应该受到应用程序的影响,因此如果我们的应用程序挂起,则可以重置板.
这些是正在运行的进程:
1 root init
2 root [kthreadd]
3 root [ksoftirqd/0]
4 root [watchdog/0]
5 root [events/0]
6 root [khelper]
63 root [kblockd/0]
72 root [ksuspend_usbd]
78 root [khubd]
85 root [kmmcd]
107 root [pdflush]
108 root [pdflush]
109 root [kswapd0]
110 root [aio/0]
740 root [mtdblockd]
828 root [rpciod/0]
982 root [jffs2_gcd_mtd10]
1003 root /sbin/udevd -d
1145 daemon portmap
1158 dbus dbus-daemon --system
1178 root /usr/sbin/ifplugd -i eth0 -fwI -u0 -d5 -l -q
1190 root /usr/sbin/ifplugd -i …
Run Code Online (Sandbox Code Playgroud) 我正在为Linux编写一个系统监视器,并希望包含一些看门狗功能.在内核中,即使/ dev/watchdog关闭,您也可以将监视程序配置为继续运行.换句话说,如果我的守护进程正常退出并关闭/ dev/watchdog,系统仍会在59秒后重新启动.这可能是也可能不是用户期望的行为.
我需要让我的守护进程知道这个设置,因为它会影响我处理SIGINT的方式.如果设置已启用,我的守护程序将需要(最好)在退出时启动有序关闭,或者(至少)警告用户系统将很快重启.
有没有人知道从用户空间获取此设置的方法?我没有在sysconf()中看到任何东西来获取值.同样,我需要能够判断软件看门狗是否已启用.
编辑:
Linux提供了一个非常简单的看门狗接口.进程可以打开/ dev/watchdog,一旦打开设备,内核将开始60秒倒计时重启,除非有一些数据写入该文件,在这种情况下时钟重新设置.
根据内核的配置方式,关闭该文件可能会也可能不会停止倒计时.从文档:
如果设备/ dev/watchdog正确关闭,则可以在不引起重启的情况下停止监视程序,除非在启用CONFIG_WATCHDOG_NOWAYOUT选项的情况下编译内核.
我需要能够判断是否在用户空间守护程序中设置了CONFIG_WATCHDOG_NOWAYOUT,以便我可以不同地处理所述守护程序的关闭.换句话说,如果该设置很高,那么简单:
# /etc/init.d/mydaemon stop
Run Code Online (Sandbox Code Playgroud)
...将在59秒内重启系统,因为没有任何内容正在写入/ dev/watchdog.因此,如果设置为高,我的SIGINT处理程序需要做其他事情(即至少警告用户).
我找不到从用户空间获取此设置的方法:(任何帮助表示赞赏.
我正在尝试创建一个简单的应用程序,其中
将图像推送到目录中(通过外部进程)
Python看门狗触发器,图像由函数处理,结果显示在窗口中
作业连续运行,并且在图像进入目录时触发处理功能。结果的绘图窗口应仅用新结果更新,而不是关闭窗口然后重新绘图。
下面的代码不显示结果。绘图窗口保持空白,然后崩溃。如果除matplotlib之外的其他工具可以轻松完成此工作,那也很好。
# plt is matplotlib.pyplot
def process_and_plot(test_file):
y, x = getresults(test_file) # function which returns results on image file
y_pos = range(len(y))
plt.figure(num=1,figsize=(20,10))
plt.bar(y_pos, y, align='center')
plt.xticks(y_pos, x)
plt.show()
# to trigger the proess_and_plt function when a new file comes in directory
class ExampleHandler(FileSystemEventHandler):
def on_created(self, event):
print event.src_path
process_and_plot(event.src_path)
event_handler = ExampleHandler()
observer.schedule(event_handler, path='path/to/directory')
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
Run Code Online (Sandbox Code Playgroud) watchdog ×10
linux ×5
python ×3
c# ×2
file ×2
.net ×1
apic ×1
arm ×1
bash ×1
busybox ×1
c ×1
cron ×1
exit-code ×1
kernel ×1
linux-kernel ×1
matplotlib ×1
monitoring ×1
termination ×1