增加进程优先级
增加正确日志输出
This commit is contained in:
parent
3235a97987
commit
bd585efe7d
4
Makefile
4
Makefile
@ -1,7 +1,7 @@
|
|||||||
CROSS_COMPILE ?=
|
CROSS_COMPILE ?=
|
||||||
CC := $(CROSS_COMPILE)gcc
|
CC := $(CROSS_COMPILE)gcc
|
||||||
CFLAGS += -g -Wall -L../libini -I../libini -fno-builtin
|
CFLAGS += -g -O2 -Wall -L../libini -I../libini -fno-builtin
|
||||||
LIB += -lini -static -g
|
LIB += -lini -static
|
||||||
BIN = reboot_temperature
|
BIN = reboot_temperature
|
||||||
|
|
||||||
all: reboot_temperature.o
|
all: reboot_temperature.o
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
[server]
|
[server]
|
||||||
thermal_zone = "/sys/class/thermal/thermal_zone0/temp";
|
thermal_zone = "/sys/class/thermal/thermal_zone0/temp";
|
||||||
temperature = 80
|
temperature = 70
|
||||||
log_file = "reboot.log";
|
log_file = "log_reboot.log";
|
||||||
second = 10
|
second = 60
|
||||||
off_power = 0
|
nice = -20
|
||||||
|
off_power = 1
|
||||||
|
|
||||||
|
Binary file not shown.
@ -3,108 +3,126 @@
|
|||||||
int get_temperature(char *path)
|
int get_temperature(char *path)
|
||||||
{
|
{
|
||||||
char buffer[SIZE];
|
char buffer[SIZE];
|
||||||
|
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
if ((fp = fopen(path, "r")) < 0) {
|
|
||||||
return 1; /* 文件不存在,则退出. */
|
|
||||||
}
|
|
||||||
|
|
||||||
while (fgets(buffer, SIZE, fp) != NULL) {
|
if ((fp = fopen(path, "r")) < 0)
|
||||||
;
|
return -1; /* 文件不存在,则退出. */
|
||||||
}
|
|
||||||
|
while (fgets(buffer, SIZE, fp) != NULL) ;
|
||||||
|
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
return atoi(buffer) / 1000;
|
return atoi(buffer) / 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
int log(int l_t, int c_t, char *log_file)
|
int error_log(int l_t, int c_t, char *log_file)
|
||||||
|
{
|
||||||
|
time_t tmpcal_ptr;
|
||||||
|
struct tm *tmp_ptr = NULL;
|
||||||
|
FILE *fp;
|
||||||
|
char buffer[SIZE];
|
||||||
|
char temperature[SIZE];
|
||||||
|
|
||||||
|
memset(buffer, 0, SIZE);
|
||||||
|
memset(temperature, 0, SIZE);
|
||||||
|
time(&tmpcal_ptr);
|
||||||
|
tmp_ptr = localtime(&tmpcal_ptr);
|
||||||
|
|
||||||
|
FILE *fd = fopen(log_file, "a+");
|
||||||
|
if (fd == NULL)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
// 写入日志文件FD
|
||||||
|
fprintf(fd, "%d.%d.%d %d:%d:%d %s %d %s %d\n", (1900 + tmp_ptr->tm_year), (1 + tmp_ptr->tm_mon), tmp_ptr->tm_mday, tmp_ptr->tm_hour, tmp_ptr->tm_min, tmp_ptr->tm_sec, "树莓CPU温度", l_t, "达到可重启温度", c_t);
|
||||||
|
|
||||||
|
// 发送邮件字符串
|
||||||
|
sprintf(temperature, "%d.%d.%d %d:%d:%d %s %d %s %d\n", (1900 + tmp_ptr->tm_year), (1 + tmp_ptr->tm_mon), tmp_ptr->tm_mday, tmp_ptr->tm_hour, tmp_ptr->tm_min, tmp_ptr->tm_sec, "树莓CPU温度", l_t, "达到可重启温度", c_t);
|
||||||
|
|
||||||
|
sprintf(buffer, "/root/qqMail/qqMail -l smtp.qq.com -p 25 -f 1605227279 -e dqqpbbbxoazibafd -q NIUYULING -r 1605227279@QQ.COM -n NIUYULING -s \"Raspberrypi Temperature\" -t \"%s\"", temperature);
|
||||||
|
//printf("%s\n", buffer);
|
||||||
|
|
||||||
|
fp = popen(buffer, "r");
|
||||||
|
pclose(fp);
|
||||||
|
fclose(fd);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int correct_log(int l_t, int c_t, char *log_file)
|
||||||
{
|
{
|
||||||
time_t tmpcal_ptr;
|
time_t tmpcal_ptr;
|
||||||
struct tm *tmp_ptr = NULL;
|
struct tm *tmp_ptr = NULL;
|
||||||
|
|
||||||
time(&tmpcal_ptr);
|
time(&tmpcal_ptr);
|
||||||
tmp_ptr = localtime(&tmpcal_ptr);
|
tmp_ptr = localtime(&tmpcal_ptr);
|
||||||
|
|
||||||
FILE *fd = fopen(log_file, "a+");
|
FILE *fd = fopen(log_file, "a+");
|
||||||
if (fd == NULL) {
|
if (fd == NULL)
|
||||||
return 0;
|
return -1;
|
||||||
}
|
|
||||||
fprintf(fd, "%d.%d.%d %d:%d:%d %s %d %s %d\n", (1900 + tmp_ptr->tm_year),
|
fprintf(fd, "%d.%d.%d %d:%d:%d %s %d %s %d\n", (1900 + tmp_ptr->tm_year), (1 + tmp_ptr->tm_mon), tmp_ptr->tm_mday, tmp_ptr->tm_hour, tmp_ptr->tm_min, tmp_ptr->tm_sec, "树莓派CPU温度", l_t, "未达到重启或者关机温度", c_t);
|
||||||
(1 + tmp_ptr->tm_mon), tmp_ptr->tm_mday, tmp_ptr->tm_hour,
|
|
||||||
tmp_ptr->tm_min, tmp_ptr->tm_sec,
|
|
||||||
"树莓CPU温度", l_t, "达到可重启温度", c_t);
|
|
||||||
fclose(fd);
|
fclose(fd);
|
||||||
|
|
||||||
char temperature[270];
|
|
||||||
sprintf(temperature, "%d.%d.%d %d:%d:%d %s %d %s %d\n", (1900 + tmp_ptr->tm_year), (1 + tmp_ptr->tm_mon), tmp_ptr->tm_mday, tmp_ptr->tm_hour, tmp_ptr->tm_min, tmp_ptr->tm_sec,
|
|
||||||
"树莓CPU温度", l_t, "达到可重启温度", c_t);
|
|
||||||
|
|
||||||
// 发送告警邮件
|
|
||||||
//char *argv[]={"/root/qqMail/qqMail", "-l", "smtp.qq.com", "-p", "25", "-f", "1605227279", "-e", "dqqpbbbxoazibafd", "-q", "NIUYULING", "-r", "1605227279@QQ.COM", "-n", "NIUYULING", "-s", "Raspberrypi Temperature", "-t", temperature, (char*)0};
|
|
||||||
//execv("/root/qqMail/qqMail", argv);
|
|
||||||
|
|
||||||
char buffer[2700];
|
|
||||||
sprintf(buffer, "/root/qqMail/qqMail -l smtp.qq.com -p 25 -f 1605227279 -e dqqpbbbxoazibafd -q NIUYULING -r 1605227279@QQ.COM -n NIUYULING -s \"Raspberrypi Temperature\" -t \"%s\"", temperature);
|
|
||||||
//printf("%s\n", buffer);
|
|
||||||
FILE *fp;
|
|
||||||
fp = popen(buffer, "r");
|
|
||||||
pclose(fp);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int get_executable_path(char *processdir, char *processname, int len)
|
int get_executable_path(char *processdir, char *processname, int len)
|
||||||
{
|
{
|
||||||
char *filename;
|
char *filename;
|
||||||
if (readlink("/proc/self/exe", processdir, len) <= 0) {
|
|
||||||
|
if (readlink("/proc/self/exe", processdir, len) <= 0)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
|
||||||
filename = strrchr(processdir, '/');
|
filename = strrchr(processdir, '/');
|
||||||
if (filename == NULL)
|
if (filename == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
++filename;
|
++filename;
|
||||||
strcpy(processname, filename);
|
strcpy(processname, filename);
|
||||||
*filename = '\0';
|
*filename = '\0';
|
||||||
|
|
||||||
return (int)(filename - processdir);
|
return (int)(filename - processdir);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[], char **env)
|
||||||
{
|
{
|
||||||
char buffer[SIZE];
|
char buffer[SIZE];
|
||||||
char log_file[SIZE];
|
char log_file[SIZE];
|
||||||
memset(buffer, 0, SIZE);
|
|
||||||
memset(log_file, 0, SIZE);
|
|
||||||
|
|
||||||
char *inifile = "conf/config.ini";
|
char *inifile = "conf/config.ini";
|
||||||
char path[SIZE] = { 0 };
|
char path[SIZE] = { 0 };
|
||||||
char executable_filename[SIZE] = { 0 };
|
char executable_filename[SIZE] = { 0 };
|
||||||
(void)get_executable_path(path, executable_filename, sizeof(path));
|
(void)get_executable_path(path, executable_filename, sizeof(path));
|
||||||
inifile=strcat(path, inifile);
|
inifile = strcat(path, inifile);
|
||||||
|
|
||||||
|
memset(buffer, 0, SIZE);
|
||||||
|
memset(log_file, 0, SIZE);
|
||||||
|
|
||||||
if (daemon(1, 1) == -1) {
|
if (daemon(1, 1) == -1) {
|
||||||
perror("daemon");
|
perror("daemon");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (-1 == (nice(getinikeyint("server", "nice", inifile)))) { // 进程优先级
|
||||||
|
perror("nice");
|
||||||
|
}
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
getinikeystring("server", "thermal_zone", inifile, buffer); // 获取thermal_zone路径
|
getinikeystring("server", "thermal_zone", inifile, buffer); // 获取thermal_zone路径
|
||||||
getinikeystring("server", "log_file", inifile, log_file); // 获取日志文件名
|
getinikeystring("server", "log_file", inifile, log_file); // 获取日志文件名
|
||||||
|
|
||||||
if (get_temperature(buffer) >= getinikeyint("server", "temperature", inifile)) {
|
|
||||||
|
|
||||||
|
if (get_temperature(buffer) >= getinikeyint("server", "temperature", inifile)) { // 达到重启或者关机温度
|
||||||
sync();
|
sync();
|
||||||
if (getinikeyint("server", "off_power", inifile) == 1) {
|
if (getinikeyint("server", "off_power", inifile) == 1) {
|
||||||
log(get_temperature(buffer), getinikeyint("server", "temperature", inifile), log_file);
|
error_log(get_temperature(buffer), getinikeyint("server", "temperature", inifile), log_file);
|
||||||
|
return reboot(RB_POWER_OFF); // 关机
|
||||||
|
|
||||||
return reboot(RB_POWER_OFF); // 关机
|
|
||||||
} else {
|
} else {
|
||||||
log(get_temperature(buffer), getinikeyint("server", "temperature", inifile), log_file);
|
error_log(get_temperature(buffer), getinikeyint("server", "temperature", inifile), log_file);
|
||||||
|
return reboot(RB_AUTOBOOT); // 重启
|
||||||
|
|
||||||
return reboot(RB_AUTOBOOT); // 重启
|
|
||||||
}
|
}
|
||||||
|
} else { // 未达到重启或者关机温度
|
||||||
|
correct_log(get_temperature(buffer), getinikeyint("server", "temperature", inifile), log_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
sleep(getinikeyint("server", "second", inifile));
|
sleep(getinikeyint("server", "second", inifile));
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
#ifndef REBOOT_TEMPERATUR_H
|
||||||
|
#define REBOOT_TEMPERATUR_H
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -7,4 +10,6 @@
|
|||||||
#include <sys/reboot.h>
|
#include <sys/reboot.h>
|
||||||
#include "libini.h"
|
#include "libini.h"
|
||||||
|
|
||||||
#define SIZE 270
|
#define SIZE 2700
|
||||||
|
|
||||||
|
#endif
|
||||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user