我想在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
运行之前,reboot
是否有可能无法完成所有工作(例如i / o操作)?
在这种情况下,这些中最好的解决方案是什么:
sync
之前添加reboot
。sleep 5
之前添加reboot
。sync
之前添加sleep
和reboot
。答案 0 :(得分:6)
在过去的十年(或两个?)中,这对任何流行的系统都不是问题。 reboot
只会更改运行级别,目标或系统正在使用的任何概念来跟踪它应处于什么状态。实际上,重启或关闭只会触发将其置于其中所需的事件那个州。通常这涉及卸载所有文件系统,内核将在发生之前刷新/同步所有数据。
所以没有。在任何现代Linux发行版中,都不需要同步。
PS。这假定do_something
不会产生任何后台任务。在这种情况下,问题完全不同,更多的是与服务同步。如果do_something
完成所有操作并退出,那就很好。