Ubuntu下看门狗程序以及基于.destop文件实现的开机自启动
首先说一下Ubuntu下看门狗程序,这个程序是用在我项目中的,用来保证核心程序能够实现崩溃自启动,这对于程序的稳定运行至关重要。
话不多少,直接上代码:
(1)新建看门狗程序 daemon_upload.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <dirent.h>
#include <sys/types.h>
#include <ctype.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <sys/param.h>
#include <sys/stat.h> #define READ_BUF_SIZE 1024
#define pidName "/home/node/nodeClient/Icardclient1/uploadFile.js"char pid[10];void init_daemon(void);//守护进程初始化函数int get_pid(void);main()
{FILE *fp;time_t t;init_daemon();//初始化为Daemonwhile(1)//每隔一分钟向test.log报告运行状态{sleep(5);//睡眠5秒钟int i = 0;i = get_pid();if (i == 0 ){if((fp=fopen("/home/node/nodelog/uploadFile.log","a")) >=0){t=time(0);fprintf(fp,"iclient.js don't exist at %s\n",asctime(localtime(&t)));int ret = 0;char s[500];char *command = "/home/node/bin/node /home/node/nodeClient/Icardclient1/uploadFile.js";memset(s,0,sizeof(s));strcpy(s,command);ret = system(s);if( ret < 0){t=time(0);fprintf(fp,"iclient.js reboot failed at %s\n",asctime(localtime(&t)));}else{t=time(0);fprintf(fp,"iclient.js reboot succeed at %s\n",asctime(localtime(&t)));}fclose(fp);}}}}int get_pid(void)
{DIR *dir;struct dirent *next;int i=0;FILE *status;char buffer[READ_BUF_SIZE];char name[READ_BUF_SIZE];dir=opendir("/proc");if(!dir){printf("Can't open /proc\n");return 0;}while((next=readdir(dir))!=NULL){if((strcmp(next->d_name,"..")==0||strcmp(next->d_name,".")==0)){continue;}if(!isdigit(*next->d_name)){continue;}sprintf(buffer,"/proc/%s/status",next->d_name);if(!(status=fopen(buffer,"r"))){continue;}if(fgets(buffer,READ_BUF_SIZE,status)==NULL){fclose(status);continue;}fclose(status);sscanf(buffer,"%*s%s",name);if(strcmp(name,pidName)==0){//printf("%s\n",next->d_name);strcpy(pid,next->d_name);printf("%s\n",pid);i = 1;}}closedir(dir);return i;
}void init_daemon(void)
{ int pid; int i; if(pid=fork()) exit(0);else if(pid< 0) exit(1);setsid();if(pid=fork()) exit(0);else if(pid< 0) exit(1);for(i=0;i< NOFILE;++i)close(i); chdir("/");umask(0);return;
}
注意:代码是可以直接拿来用的,不过需要修改一下代码部分地方,主要是代码中几个文件路径,你需要提前建立好文件夹以及文件。
(2)将daemon_upload.c文件通过g++编译成可执行文件node_upload
g++ -o daemon_upload.c node_upload
(3)基于.destop文件实现程序的开机自启动
ubuntu下有很多中开机自动运行程序的方法,在开机的不同过程中可以启动不同的程序.如在开机启动时自动运行程序,是通过修改放置在
/etc/rc或
/etc/rc.d 或
/etc/rc?.d
目录下的脚本文件,可以使init自动启动其它程序。例如:编辑
/etc/rc.d/rc.local 文件(该文件通常是系统最后启动的脚本),
也可以在用户登陆是启动,用户登录时,bash先自动执行系统管理员建立的全局登录script :
/ect/profile
然后bash在用户起始目录下按顺序查找三个特殊文件中的一个:
/.bash_profile、
/.bash_login、
/.profile,
但只执行最先找到的一个。
在项目中,采用的一种比较独特的方式:在/etc/xdg/autostart/文件路径下,新建node_upload,destop文件,文件内容如下:
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=Node
X-GNOME-FullName=Node Js
GenericName=Node
Comment=Update your microblog and view others' statuses
Icon=node
Exec=/home/node/nodeClient/daemon/node_upload
#OnlyShowIn=GNOME;Unity;
X-GNOME-Autostart-enadbled=true
#AutostartCondition=GSettings org.gwibber.preferences autostart
X-GNOME-Autostart-Delay=10
NoDisplay=trueName[en_US]=node_upload
注意这个地方是(2)中生成可执行文件的绝对路径。
至此,当设备开机时,就可以实现程序的自启动以及崩溃重启了。
Ubuntu下看门狗程序以及基于.destop文件实现的开机自启动相关推荐
- C# 简单制作一个看门狗程序
前言 在有些特殊项目中,软件可能是无人值守的,如果程序莫名其妙挂了或者进程被干掉了等等,这时开发一个看门狗程序是非常有必要的,它就像一只打不死的小强,只要程序非正常退出,它就能立即再次将被看护的程序启 ...
- shell看门狗程序
Shell 看门狗程序是一种常见的系统管理工具,其作用是在后台持续监测系统进程,如果发现某个进程出现故障或者意外停止,则会自动重新启动该进程. 通常情况下,Shell 看门狗程序会以守护进程的方式运行 ...
- Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法
Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法 最近由于老师要求要在Ubuntu下QT上进程多线程服务器的开发,虽然只是单纯的调用qt的network模块,但是为了避免麻烦,我 ...
- [C++]Linux之Ubuntu下编译C程序出现错误:“ stray ‘\302‘或者‘\240‘ in program”的解决方案
[C++]Linux之Ubuntu下编译C程序出现错误:" stray '\302'或者'\240' in program"的解决方案 参考文章: (1)[C++]Linux之Ub ...
- Ubuntu 下编写C程序
Ubuntu 下编写C程序 一.编写C程序 二.编译C程序 三.make工具和Makefile文件 一.编写C程序 使用VIM编辑器编写程序,也可以使用vscode. 1.1.设置vim编辑器 设置v ...
- 单片机看门狗c语言,单片机看门狗程序
/*此程序实现单片机"看门狗"WDT的功能*/ #include"p18f458.h" unsignedlongi; /*系统初始化子程序*/ voidinit ...
- 单片机看门狗c语言,单片机看门狗程序 -解决方案-华强电子网
*此程序实现单片机"看门狗"WDT的功能*/ #include"p18f458.h" unsignedlongi; /*系统初始化子程序*/ voidiniti ...
- Ubuntu下编译qt程序libQtWebEngineCore报错
最近在Ubuntu下编译qt程序时, 报如下错误 libQt5WebEngineCore.so: .dynsym local symbol at index 3 (>= sh_info of 3 ...
- Ubuntu下C语言程序的编写
Ubuntu下C语言程序的编写 要求:请编写一个主程序文件 main1.c 和一个子程序文件 sub1.c, 要求:子程序sub1.c 包含一个算术运算函数 float x2x(int a,int b ...
最新文章
- Akka的字数统计MapReduce
- 判断三角形是否是直角三角形
- aop中joinpoint_Spring AOP示例教程–方面,建议,切入点,JoinPoint,注释,XML配置...
- mysql php 时间比较大小_MySql中时间比较的实现
- [图解]创建虚拟机以及安装CentOS系统和创建自定义布局
- 符号回归工具之 geppy: Python中的基因表达编程框架
- 北京自贸区国际商务服务片区挂牌 总面积48平方公里
- 信息系统项目管理师复习方法学习计划
- 解决css样式中first-child和last-child不生效的问题
- 查找和排序方法归类----C和C++
- XShell6 循环执行脚本
- python笔记图片_python-opencv笔记 图像的读取和简单几何图形绘制
- Qt for IOS 制作APP启动页面
- 2k19徽章修改_您可以修改此会议徽章
- SCDL--稀疏编码(sparse code)与字典学习(dictionary learning)
- android 加固服务器,Python 脚本构建Android APK 自动加固、打渠道包并上传服务器
- python数据分析与爬虫区别_Python数据分析与爬虫
- 关于实习结束后的一些事
- Qt中调用thrift
- 百尺杆头,更进一步---和大家新年共勉!