feat(service): add auto-start management for services
Implement setBootAtStart and removeBootAtStart functions to handle service auto-start configuration separately from service creation/removal. Update handlers to use these new functions for better control of boot behavior. The changes support Windows, systemd and init.d systems.
This commit is contained in:
@@ -180,14 +180,20 @@ func CreateInstanceHandler(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
if req.BootAtStart {
|
||||
if err := createBootService(user.Username, req.InstanceInfo.Name, configPath, runUser); err != nil {
|
||||
if err := createBootService(user.Username, req.InstanceInfo.Name, configPath, runUser); err != nil {
|
||||
frpcDB.Exec("DELETE FROM frpcInstances WHERE userID = ? AND name = ?", userID, req.InstanceInfo.Name)
|
||||
os.Remove(configPath)
|
||||
postLog.Error(fmt.Sprintf("[CreateInstanceHandler] Failed to create boot service for instance %s: %v", req.InstanceInfo.Name, err))
|
||||
SendErrorResponse(w, http.StatusInternalServerError, "Failed to create boot service")
|
||||
return
|
||||
}
|
||||
|
||||
if req.BootAtStart {
|
||||
if err := setBootAtStart(user.Username, req.InstanceInfo.Name); err != nil {
|
||||
postLog.Error(fmt.Sprintf("[CreateInstanceHandler] Failed to set boot at start for instance %s: %v", req.InstanceInfo.Name, err))
|
||||
SendErrorResponse(w, http.StatusInternalServerError, "Failed to set boot at start")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
SendSuccessResponse(w, "Instance created successfully", map[string]interface{}{
|
||||
@@ -264,12 +270,10 @@ func DeleteInstanceHandler(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
if instance.BootAtStart {
|
||||
if err := removeBootService(user.Username, instance.Name); err != nil {
|
||||
postLog.Error(fmt.Sprintf("[DeleteInstanceHandler] Failed to remove boot service for instance %s: %v", instance.Name, err))
|
||||
SendErrorResponse(w, http.StatusInternalServerError, "Failed to remove boot service")
|
||||
return
|
||||
}
|
||||
if err := removeBootService(user.Username, instance.Name); err != nil {
|
||||
postLog.Error(fmt.Sprintf("[DeleteInstanceHandler] Failed to remove boot service for instance %s: %v", instance.Name, err))
|
||||
SendErrorResponse(w, http.StatusInternalServerError, "Failed to remove boot service")
|
||||
return
|
||||
}
|
||||
|
||||
if _, err := os.Stat(instance.ConfigPath); err == nil {
|
||||
@@ -508,22 +512,22 @@ func handleSystemConfigModify(w http.ResponseWriter, r *http.Request, instance F
|
||||
}
|
||||
|
||||
if newBootAtStart {
|
||||
if err := removeBootService(user.Username, instance.Name); err != nil {
|
||||
postLog.Error(fmt.Sprintf("[handleSystemConfigModify] Failed to remove boot service: %v", err))
|
||||
bootServiceError = fmt.Sprintf("Failed to remove boot service: %v", err)
|
||||
if err := removeBootAtStart(user.Username, instance.Name); err != nil {
|
||||
postLog.Error(fmt.Sprintf("[handleSystemConfigModify] Failed to remove boot at start: %v", err))
|
||||
bootServiceError = fmt.Sprintf("Failed to remove boot at start: %v", err)
|
||||
}
|
||||
instance.Name = newName
|
||||
if err := createBootService(user.Username, newName, newConfigPath, newRunUser); err != nil {
|
||||
postLog.Error(fmt.Sprintf("[handleSystemConfigModify] Failed to create boot service: %v", err))
|
||||
if err := setBootAtStart(user.Username, newName); err != nil {
|
||||
postLog.Error(fmt.Sprintf("[handleSystemConfigModify] Failed to set boot at start: %v", err))
|
||||
if bootServiceError != "" {
|
||||
bootServiceError += "; "
|
||||
}
|
||||
bootServiceError += fmt.Sprintf("Failed to create boot service: %v", err)
|
||||
bootServiceError += fmt.Sprintf("Failed to set boot at start: %v", err)
|
||||
}
|
||||
} else {
|
||||
if err := removeBootService(user.Username, instance.Name); err != nil {
|
||||
postLog.Error(fmt.Sprintf("[handleSystemConfigModify] Failed to remove boot service: %v", err))
|
||||
bootServiceError = fmt.Sprintf("Failed to remove boot service: %v", err)
|
||||
if err := removeBootAtStart(user.Username, instance.Name); err != nil {
|
||||
postLog.Error(fmt.Sprintf("[handleSystemConfigModify] Failed to remove boot at start: %v", err))
|
||||
bootServiceError = fmt.Sprintf("Failed to remove boot at start: %v", err)
|
||||
}
|
||||
instance.Name = newName
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user