linux定时秒级重启系统
再linux下定时重启只能精确到分钟。但有时项目的需要,要定时几秒关机。于是想出 了以下的方法:例如我需要延时5秒重启linux系统1.时间向前调整60-5秒,例如现在的时间为17:02:01,调整为17:01:062.定时1分钟重启linux,即在17:02:06重启电脑3.时间调回原来的时间,即调为17:02:01这样冲17:02:01到17:02:06关闭电脑,所经历的时...
·
再linux下定时重启只能精确到分钟。但有时项目的需要,要定时几秒关机。于是想出 了以下的方法:
例如我需要延时5秒重启linux系统
1.时间向前调整60-5秒,例如现在的时间为17:02:01,调整为17:01:06
2.定时1分钟重启linux,即在17:02:06重启电脑
3.时间调回原来的时间,即调为17:02:01
这样冲17:02:01到17:02:06关闭电脑,所经历的时间刚好为5秒
下面为我的代码
/*执行shell指令,并获取返回*/
static char* shellExec(char* command)
{
static char buf[2048] = {0};
char* outStr = NULL;
char line[256]={0};
FILE* fp=NULL;
memset(buf,0,2048);
fp = popen(command,"r");
if(fp)
{
while(fgets(line,sizeof(line),fp) != NULL)
{
strcat(buf,line);
}
outStr = buf;
}
fclose(fp);
return outStr;
}
/*定时系统在(1-59)秒之后重启*/
void rebootAfter(unsigned int secons)
{
time_t t;
struct tm * lt;
char cmd[32]={0};
time (&t); //获取Unix时间戳。
if(secons > 59)return;
t -= (60-secons); //先将系统时间向前调整
lt = localtime (&t);//转为时间结构。
sprintf (cmd,"/bin/date -s %02d:%02d:%02d",lt->tm_hour, lt->tm_min, lt->tm_sec);
shellExec(cmd);
shellExec("/sbin/shutdown -r +1"); //定时1分钟之后关机
t += (60-secons); //调整回系统时间
lt = localtime (&t);
sprintf (cmd,"/bin/date -s %02d:%02d:%02d",lt->tm_hour, lt->tm_min, lt->tm_sec);
shellExec(cmd);
}
当然,有的人说可以直接使用sleep
wall 'The System Will Shutdown In 10 secs!' && sleep 10 && shutdown -h now
但是这个指令会阻塞,而上面的方法不会阻塞。有时候需要在指定定时重启之后做一些其他的事情,所以不希望被阻塞。
提醒:以上的方法不是所有的系统都可以实现,需要根据实际情况使用
更多推荐
已为社区贡献1条内容
所有评论(0)