agent/util/serviceutil/serviceutil_linux.go (29 lines of code) (raw):
//go:build linux
// +build linux
package serviceutil
import (
"context"
"time"
"github.com/aliyun/aliyun_assist_client/agent/util/process"
"github.com/aliyun/aliyun_assist_client/agent/util/systemdutil"
"github.com/aliyun/aliyun_assist_client/thirdparty/sirupsen/logrus"
)
// RestartAgentService restarts Agent service, the Agent service process itself
// should not call this function
func RestartAgentService(logger logrus.FieldLogger) {
if systemdutil.IsRunningSystemd() {
ctx, cancel := context.WithTimeout(context.Background(), time.Second*time.Duration(5))
defer cancel()
if _, err := systemdutil.RestartUnit(ctx, "aliyun.service"); err != nil {
logger.WithError(err).Error("failed to restart service by systemd api")
goto RESTARTBYCOMMAND
}
return
}
RESTARTBYCOMMAND:
logger.Info("try to restart service by command")
if err := restartServiceByCommand(); err != nil {
logger.WithError(err).Error("failed to restart service by command")
}
}
func restartServiceByCommand() error {
processer := process.ProcessCmd{}
processer.SyncRunSimple("aliyun-service", []string{"--stop"}, 10)
return processer.SyncRunSimple("aliyun-service", []string{"--start"}, 10)
}