2017-04-04 114 views
0

我想在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之前加上syncsleep
+0

'do_something'究竟是什么?请显示其代码。 –

回答

5

这对过去十年(或两年)的任何流行系统都不是问题。 reboot只会更改系统正在使用的运行级别或目标或任何概念,以便跟踪它应该处于的状态。在实践中,重新启动或关闭只会触发将其置于该状态所需的事件。通常这包括卸载所有文件系统,内核将在发生这种情况之前刷新/同步所有数据。

所以没有。在任何现代Linux发行版中,不需要同步。

PS。这假定do_something不产生任何后台任务。在这种情况下,这个问题是完全不同的,更多与服务同步有关。如果do_something完成所有操作并退出,那么您很好。

+0

好的,启发性的答案,我学到了一些我在阅读Q时没有想到的东西。 – 0xc0de