linux定时秒级重启系统

再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

但是这个指令会阻塞,而上面的方法不会阻塞。有时候需要在指定定时重启之后做一些其他的事情,所以不希望被阻塞。

提醒:以上的方法不是所有的系统都可以实现,需要根据实际情况使用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值