+1
-13
@@ -10,13 +10,8 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
// MOUNT_POINT должен быть определён (например, как глобальная константа)
|
||||
// const MOUNT_POINT = "/mnt/mydevice"
|
||||
|
||||
// handleReboot обрабатывает HTTP-запрос на перезагрузку системы
|
||||
func HandleReboot(w http.ResponseWriter, r *http.Request) {
|
||||
MOUNT_POINT := os.Getenv("MOUNT_POINT")
|
||||
// Отправляем JSON-ответ (как в C: mg_http_reply)
|
||||
response := map[string]string{
|
||||
"status": "success",
|
||||
"message": "System rebooting...",
|
||||
@@ -27,26 +22,19 @@ func HandleReboot(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
// Синхронизируем все файловые системы (аналог sync())
|
||||
syscall.Sync()
|
||||
|
||||
// Размонтируем точку монтирования, если она смонтирована
|
||||
fmt.Printf("Unmounting %s...\n", MOUNT_POINT)
|
||||
if err := syscall.Unmount(MOUNT_POINT, 0); err != nil {
|
||||
// Ошибку не фатализируем, просто логируем
|
||||
fmt.Printf("Unmount error: %v\n", err)
|
||||
}
|
||||
|
||||
// Повторная синхронизация
|
||||
syscall.Sync()
|
||||
|
||||
// Инициируем мягкую перезагрузку через команду shutdown
|
||||
fmt.Println("Initiating soft reboot via shutdown...")
|
||||
|
||||
// Запускаем shutdown в отдельной горутине с небольшой задержкой,
|
||||
// чтобы ответ гарантированно ушёл клиенту до завершения сервера
|
||||
go func() {
|
||||
time.Sleep(500 * time.Millisecond) // ждём 0.5 секунды
|
||||
time.Sleep(500 * time.Millisecond)
|
||||
cmd := exec.Command("shutdown", "-r", "now")
|
||||
if err := cmd.Run(); err != nil {
|
||||
fmt.Printf("Reboot failed: %v\n", err)
|
||||
|
||||
Reference in New Issue
Block a user