我有一个启动shell脚本,它从文件中读取一个值,将其递增1并将其写回。之后,我进行系统的电源循环(关闭并打开电源)。我试图用这种方式记录重启的次数。但我发现文件计数器始终保持为1.如果我使用reboot命令重新启动,则文件中的计数器会正确递增。这是因为内核缓冲并延迟了文件写入。有没有办法迫使它立即写出来?
rc.user文件如下:
cd /root
bash bootcounter.sh
sleep 1
bootcounter.sh如下
rebootcount=$(<bootcount)
rebootcount=$(($rebootcount+1))
echo $rebootcount >bootcount
...谢谢
答案 0 :(得分:5)
您需要sync命令。这应该刷新所有文件系统。
count=$( cat bootcount ) echo $( expr $count + 1 ) > bootcount sync
尽管如此,你应该使用完整的bootcount路径。
答案 1 :(得分:1)
在文件系统中同步文件操作没有简单而统一的答案 - 它们都是依赖于文件系统的。例如,事实上,可能没有强制写作,因为根本就没有写作 - 如果我们谈论的是纯粹的虚拟系统 - 或者可能存在多层写作,如果我们谈论的是某些网络 - 导出文件系统。
您可以尝试一些事项,但通常情况下,“您的里程可能会有所不同”:
umount
。大多数Linux发行版在关机过程中卸载所有文件系统,并确保其干净且完全转储到硬件驱动器状态。mount -o remount,ro /YOUR-FILE-SYSTEM
sync
,但它有自己的故障:
sync
调用只是对文件系统的建议,而不是严格的命令sync
调用可能会开始同步,但同步本身需要一些时间;没有办法知道同步完成的时间sleep 5
之类的东西来睡5秒让光盘进行同步帮助sync; sync; sync
这样的解决方法,据报道也会以某种神秘的方式提供帮助echo 3 >/proc/sys/vm/drop_caches
- 它还会强制转储应该写入的缓存,但它也需要时间,而且无法知道它是否已完成。有时所有方法的组合都有效,即:sync; sync; sync
sleep 5
echo 3 >/proc/sys/vm/drop_caches
答案 2 :(得分:0)
尝试:
rebootcount=`expr $rebootcount + 1`
echo $rebootcount >bootcount
或更简单:
echo `expr $rebootcount + 1` >bootcount
答案 3 :(得分:0)
此信息已被跟踪!使用以下内容:
last reboot
其中列出了自创建文件/var/log/wtmp
以来所有以前的系统引导。此外,它还会告诉您服务器启动了多长时间,以及服务器启动和停机的时间。
看起来像这样:
reboot system boot 2.6.35.10-74.fc1 Sun Jan 9 11:19 - 11:48 (00:28)
reboot system boot 2.6.35.10-74.fc1 Sun Jan 9 05:27 - 05:45 (00:17)
reboot system boot 2.6.35.10-74.fc1 Sat Jan 8 05:30 - 09:43 (04:12)
只是说。