agent/rebooter/rebooter_unix.go (24 lines of code) (raw):
// Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"). You may not
// use this file except in compliance with the License. A copy of the
// License is located at
//
// http://aws.amazon.com/apache2.0/
//
// or in the "license" file accompanying this file. This file is distributed
// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
// either express or implied. See the License for the specific language governing
// permissions and limitations under the License.
//go:build darwin || freebsd || linux || netbsd || openbsd
// +build darwin freebsd linux netbsd openbsd
// Package rebooter provides utilities used to reboot a machine.
package rebooter
import (
"bytes"
"os/exec"
"syscall"
"github.com/aws/amazon-ssm-agent/agent/log"
)
const (
timeOutInMinutesBeforeReboot = "+1" // Indicates 1 minute
)
// reboot is performed by running the following command
// /sbin/shutdown -r +1
// The above command will cause the machine to reboot after 1 minute
func reboot(log log.T) (err error) {
log.Infof("Rebooting the machine in %v Minutes..", timeOutInMinutesBeforeReboot)
command := exec.Command("/sbin/shutdown", "-r", timeOutInMinutesBeforeReboot)
command.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
var stdout, stderr bytes.Buffer
command.Stderr = &stderr
command.Stdout = &stdout
err = command.Start()
log.Infof("shutdown output: %v\n", stdout.String())
if stderr.Len() != 0 {
log.Errorf("shutdown error: %v\n", stderr.String())
}
return
}