检测自上次在 L​​inux 上的 shell 脚本运行以来的重启?

检测自上次在 L​​inux 上的 shell 脚本运行以来的重启?

从 shell 脚本中判断主机自上次运行脚本以来是否重新启动的最佳方法是什么?我可以考虑在每次运行时将正常运行时间存储在文件中,并检查它是否减少了,但这似乎并不完全可靠(服务器可能会快速重新启动,存储较低的正常运行时间,然后缓慢重新启动并得出更高的正常运行时间)。

有没有类似“起始于”的值,可以保证只在重启时更改?或者有其他检测重启的好方法?

答案1

如果您不想使用 cron,您也可以在 中创建一个目录/dev/shm。由于该位置在内存中,因此计算机启动时它将始终为空。如果它不为空,则表示您尚未重新启动。

答案2

  • 在系统启动时在某处创建一个目录。
  • 当脚本运行时,如果目录存在,则系统已重新启动,否则不存在。
  • 获取脚本以删除目录。

使用@reboot/etc/ 中的指令定时任务在系统启动时创建目录。

答案3

另一种方法是触碰启动脚本中的某个文件并在脚本中搜索该文件,然后可以在第一次运行时删除该脚本。

只要小心处理好运行时级别的变化等等即可。

答案4

系统信息() OS 调用会为您提供自上次重启以来的时间。这是 uptime 在执行某些格式化之前获取数据的地方 - 编写您自己的包装器比解析 uptime 的输出/找出如何读取 init (pid 1) 的开始时间更简单。

#include <stdio.h>
#include <time.h>
#include <errno.h>

int main(int argc, char **argv)
{
   struct sysinfo info;
   int status;

   status=sysinfo(&info);
   if (status==0) {
      printf("%d\n", info.uptime);
   } else {
      fprintf(STDERR,"error %d occurred\n", errno);
   }
   exit (status);
}

您还需要从脚本中触摸文件并轮询其修改时间(使用统计(1)从你的脚本或统计(2)来自C)

相关内容