运行命令后安全重启?
问题描述:
我想在cronjob中运行一些代码后重新启动linux机器。运行命令后安全重启?
的代码基本上是这样的:
#!/bin/sh
do_something
reboot
其中do_something
基本上是:
function do_something {
local REPORT_URL=https://example.com/services/status
local PAYLOAD='{"message":"Update script run with success.","code":'$UPDATE_SUCCESS'}'
curl -X POST --form "payload=$PAYLOAD" "$REPORT_URL"
}
是否有可能是do_something
没有完成它的任务(例如I/O操作)之前reboot
运行?
在这种情况下,这将是这些的当中最好的解决办法:
-
reboot
之前添加sync
。 - 在
reboot
之前加sleep 5
。 - 在
reboot
之前加上sync
和sleep
。
答
这对过去十年(或两年)的任何流行系统都不是问题。 reboot
只会更改系统正在使用的运行级别或目标或任何概念,以便跟踪它应该处于的状态。在实践中,重新启动或关闭只会触发将其置于该状态所需的事件。通常这包括卸载所有文件系统,内核将在发生这种情况之前刷新/同步所有数据。
所以没有。在任何现代Linux发行版中,不需要同步。
PS。这假定do_something
不产生任何后台任务。在这种情况下,这个问题是完全不同的,更多与服务同步有关。如果do_something
完成所有操作并退出,那么您很好。
+0
好的,启发性的答案,我学到了一些我在阅读Q时没有想到的东西。 – 0xc0de
'do_something'究竟是什么?请显示其代码。 –