2017-04-04 110 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