Linux 软件看门狗 watchdog使用介绍
背景:
root@119.10.6.23:/usr/local/php# ps aux|grep watchdog
root 6 0.0 0.0 0 0 ? S Aug28 4:50 [watchdog/0]
root 10 0.0 0.0 0 0 ? S Aug28 4:11 [watchdog/1]
root 14 0.0 0.0 0 0 ? S Aug28 3:58 [watchdog/2]
root 18 0.0 0.0 0 0 ? S Aug28 3:36 [watchdog/3]
附:
最简单的安装教程(CentOS)
yum install watchdog -y
modprobe softdog
chkconfig watchdog on
/etc/init.d/watchdog start
配置看门狗程序,开机自动运行
chkconfig watchdog on
启动看门狗
sudo /etc/init.d/watchdog start
Linux 自带了一个 watchdog 的实现,用于监视系统的运行,包括一个内核 watchdog module 和一个用户空间的 watchdog 程序。内核 watchdog 模块通过 /dev/watchdog 这个字符设备与用户空间通信。用户空间程序一旦打开 /dev/watchdog 设备(俗称“开门放狗”),就会导致在内核中启动一个1分钟的定时器(系统默认时间),此后,用户空间程序需要保证在1分钟之内向这个设备写入数据(俗称“定期喂狗”),每次写操作会导致重新设定定时器。如果用户空间程序在1分钟之内没有写操作,定时器到期会导致一次系统 reboot 操作(“狗咬人了”呵呵)。通过这种机制,我们可以保证系统核心进程大部分时间都处于运行状态,即使特定情形下进程崩溃,因无法正常定时“喂狗”,Linux系统在看门狗作用下重新启动(reboot),核心进程又运行起来了。多用于嵌入式系统。
打开 /dev/watchdog 设备(“开门放狗”):
int fd_watchdog = open("/dev/watchdog", O_WRONLY); if(fd_watchdog == -1) { int err = errno; printf("\n!!! FAILED to open /dev/watchdog, errno: %d, %s\n", err, strerror(err)); syslog(LOG_WARNING, "FAILED to open /dev/watchdog, errno: %d, %s", err, strerror(err)); }
每隔一段时间向 /dev/watchdog 设备写入数据(“定期喂狗”):
//feed the watchdog if(fd_watchdog >= 0) { static unsigned char food = 0; ssize_t eaten = write(fd_watchdog, &food, 1); if(eaten != 1) { puts("\n!!! FAILED feeding watchdog"); syslog(LOG_WARNING, "FAILED feeding watchdog"); } }
关闭 /dev/watchdog 设备,通常不需要这个步骤:
close(fd_watchdog);
所需头文件:
#include <unistd.h> #include <sys/stat.h> #include <syslog.h> #include <errno.h>
关于Linux 软件看门狗 watchdog的使用就介绍到这,有什么问题可以留言
相关推荐
-
简析Linux中如何改变文件或目录的访问权限
Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权限分为只读,只写和可执行三种.以文件为例,只读权限表示只允许读其内容,而禁止对其做任何的更改操作.可执行权限表示允许将该文件作为一个程序执行.文件被创建时,文件所有者自动拥有对该文件的读.写和可执行权限,以便于对文件的阅读和修改.用户也可根据需要把访问权限设置为需要的任何组合. 有三种不同类型的用户可对文件或目录进行访问:文件所有者,同组用户.其他用户.所有者一般是文件的
-
Linux文件权限与目录管理详解
一.Linux文件系统的三种身份 1).文件所有者 2).同组用户 同一个用户组的用户可以访问该用户组的文件: 每个账号可以加入多个用户组. 在同一个用户组的文件也可以设置不同的权限,可以不让本组用户查看. 3).其他人 除了文件主.同组用户以外的人就是其他人. PS: /etc/passwd 记录所有用户的账号 /etc/shadow 记录所有用户的密码 /etc/group 记录所有的组名 二.文件属性 ls -al 显示所有的文件名和相关属性(包括以.开头的隐藏文件) total 72 d
-
图文详解Linux服务器搭建JDK环境
首先,当然是去下载Linux的JDK咯. 先看你Linux的系统多少位: getconf LONG_BIT 然后去下载对应的JDK位数 版本.-自己去谷歌搜索哦 我这里下载的是:jdk-7u79-linux-x64.tar.gz 首先我创建了2个文件夹: mkdir -p /java/jdk jdk-7u79-linux-x64.tar.gz我放在java目录下 java -version #查看服务器是否安装过jdk 我没有安装过,会提示 -bash: java: command not fo
-
Linux中文件权限目录权限的意义及权限对文件目录的意义
linux中目录与文件权限的意义 一.文件权限的意义 r:可以读这个文件的具体内容: w:可以编辑这个文件的内容,包括增加删除文件的具体内容: x:文件就具有了可执行的权限-------注意:这里和window不一样,在win中,文件的可执行权限是通过扩展名表现出来的,如exe.bat等,但是在linux中文件的可执行权限是通过这个x决定的,与文件名没有什么关系. 二.目录权限的意义 r:可以查看此目录下的完整文件列表信息. w:可以对此目录下的所有的文件及目录进行相关的更改,也就是可以更改这个
-
Linux 文件和目录权限详细介绍
Linux文件和目录权限解读 如何设置Linxu文件和目录的权限 字符表示法 1)ls -l:查看所在目录所有文件的权限 2)chmod u=r file:把file文件的当前(用户user)的权限赋值为可写模式 3)chmod g=wrx file:把file文件的当前(组gruop)的权限赋值为可写,可读,可执行模式 4)chmod g-x file:把file文件的当前(组group)的权限减去可执行模式 5)chmod o+w file:把file文件的当前(所有人other)的权限
-
Linux常用命令全集(超全面)
系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 cat /proc/cpuinfo 显示CPU info的信息 cat /proc/interrupts 显示中断 cat /proc/meminfo 校验
-
linux修改目录和文件权限的简单命令解释
今天遇到的问题,如何一个用户如www的权限复制给我的用户? 目录的权限表示:dwrxr--r-- 其中第一个字符 d代表目录, -代表字符 w代表可写,r代表可读 x代表可执行 数字为4,2,1其中第一组是文件或者目录所有者权限,第二组代表当前用户所在用户组,第三组是其他用户组的权限所以控制文件的权限是精确到组的 用 chmod 权限 目录 复制代码 代码如下: chmod 777 testchmod u+w test
-
Linux 软件看门狗 watchdog使用介绍
背景: root@119.10.6.23:/usr/local/php# ps aux|grep watchdog root 6 0.0 0.0 0 0 ? S Aug28 4:50 [watchdog/0] root 10 0.0 0.0 0 0 ? S Aug28 4:11 [watchdog/1] root 14 0.0 0.0 0 0 ? S Aug28 3:58 [watchdog/2] root 18 0.0 0.0 0 0 ? S Aug28 3:36 [watchdog/3] 附
-
详解linux 看门狗驱动编写
看门狗是linux驱动的一个重要环节.某些特殊的设备,有时候需要放在一些环境恶劣的地方,比如电信设备.但是,任何软件都不可能100%没有bug.如何保证软件在遇到严重bug.死机的时候也能正常运行呢,那么看门狗就是有效的一种方法.看门狗一般要求用户定时喂狗,如果一段时间没有喂狗的话,那么系统就会自动重启.今天,我们就来看看这个看门狗驱动怎么编写? 1.代码目录 drivers/watchdog 2.阅读目录下的Kconfig,可以找一个s3c模块macro config HAVE_S3C2410
-
Python实战之能监控文件变化的神器—看门狗
一.前言 假设现在有一个应用场景,需要对文件系统进行监控,发生变化时产生日志,对新增的文件做一些相应的操作. 比如说应用到我们之前的音乐高潮提取器:若当前文件夹下增加了一个音乐文件,监控器就调用音乐高潮提取器,自动提取该音乐文件的高潮部分. 这样的监控器写起来也不难,但是很花时间,有许多情况要考虑.不过幸好我们是写Python的,有许多轮子可以使用. 二.准备 开始之前,你要确保Python和pip已经成功安装在电脑上噢. Windows环境下打开Cmd(开始-运行-CMD),苹果系统环境下请打
-
Spring Boot调用 Shell 脚本实现看门狗功能
需要实现看门狗功能,定时检测另外一个程序是否在运行,使用 crontab 仅可以实现检测程序是否正在运行,无法做到扩展,如:手动重启.程序升级(如果只需要实现自动升级功能可以使用 inotify)等功能:最后决定使用 Spring Boot 调用 Shell 脚本来实现 一.脚本 1.1 启动脚本 #!/bin/bash ps -ef | grep "demo-app-0.0.1-SNAPSHOT.jar" | grep -v "grep" if [ "$
-
在linux下开启FTP服务方法介绍
1. 首先服务器要安装ftp软件,查看是否已经安装ftp软件下: #which vsftpd 如果看到有vsftpd的目录说明服务器已经安装了ftp软件 如果没有安装ftp软件的话,这里有下载地址和相关教程可以参考: Wing FTP Server FTP服务器端中文版安装使用教程 2. 查看ftp 服务器状态 #service vsftpd status 3. 启动ftp服务器 #service vsftpd start 4. 重启ftp服务器 #service vsftp
-
3分钟学会如何上手supervisor看门狗
软硬件环境 centos7.6.1810 64bit cat /etc/redhat-release #查看系统版本 supervisor 3.4.0 python 2.7.5 supervisor简介 supervisor是一个用python语言编写的进程管理工具,它可以很方便的监听.启动.停止.重启一个或多个进程.当一个进程意外被杀死,supervisor监听到进程死后,可以很方便的让进程自动恢复,不再需要程序员或系统管理员自己编写代码来控制. supervisord安装 yum insta
-
linux软件版本管理命令update-alternatives使用详解
linux软件版本管理命令update-alternatives使用详解 update-alternatives 命令用于处理linux系统中软件版本的切换,在各个linux发行版中均提供了该命令,命令参数略有区别,但大致是一样的. 1. 注册软件 以jdk为例,安装了jdk以后,先要在update-alternatives工具中注册: # update-alternatives --install /usr/bin/java java /opt/jdk1.8.0_91/bin/java 200
-
Linux shell脚本基础学习详细介绍(完整版)第1/2页
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Linux 脚本编写基础 ◆1.1 语法基本介绍1.1.1 开头程序必须以下面的行开始(必须方在文件的第一行):#!/bin/sh符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序.当编辑好脚本时,如果要执行该脚本,还必须使其可执行.要使脚本可执行:编译
-
linux命令scp和sftp详细介绍
linux命令scp和sftp详细介绍 1. 使用 scp 命令传输文件: 使用 scp 命令可以用来通过安全.加密的连接在不同主机之间传输文件. (1)把本地文件传输到远程主机: 一般语法:scp [本地文件] [用户名@远程主机IP地址:/目标文件夹] (2) 把远程文件传输到本地主机: 一般语法:scp [用户名@远程主机IP地址:/源文件] [本地目录] Note: scp后加 -r 选项可以传输文件夹. 2.使用sftp命令建立FTP会话: 使用sftp命令可以用来打开安全互动的.加密
-
linux下多线程中的fork介绍
目录 问题提出: 情况(1)fork在创建子线程之前 情况(2)fork在创建子线程之后 情况(3)子线程中的fork 结论: 问题提出: 回想一下:当一个程序只有主线程的时候调用fork,此时fork会创建出的子进程也会只有一条线程: 那要是把fork放入多线程的程序中呢? 我们来试验下: 情况(1)fork在创建子线程之前 代码: #include <stdio.h> #include <pthread.h> #include <unistd.h> void* pt
随机推荐
- angular+ionic 的app上拉加载更新数据实现方法
- ASP中用select case代替其他语言中的switch case, default用case else
- Access 使用总结一篇
- 浅谈javascript 面向对象编程
- 调用innerHTML之后onclick失效问题的解决方法
- 来自微软的免费杀毒软件抢先试用
- .net中 发送邮件内容嵌入图片的具体实例
- Python使用CMD模块更优雅的运行脚本
- java 类加载机制和反射详解及实例代码
- php模仿asp Application对象在线人数统计实现方法
- Java多线程编程中ThreadLocal类的用法及深入
- Spring自动扫描无法扫描jar包中bean的解决方法
- 5个书写JavaScript代码的坏习惯,看看你中枪了没?
- java IO流 之 输入流 InputString()的使用
- 小白兔求职篇 搞笑
- 深入浅出Shell编程 Shell变量介绍
- 自动最大化窗口的Javascript代码
- 使用Curl命令查看请求响应时间方法
- Java非递归实现删除任意目录的方法
- Android中TabLayout+ViewPager 简单实现app底部Tab导航栏