-
-
Notifications
You must be signed in to change notification settings - Fork 75
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: cli command to unlock the autorestic running value (#329)
* fix: cli command to unlock the autorestic running value * fix(unlock cmd): get user confirmation in case an instance is still running * fix(cmd unlock): add force flag
- Loading branch information
Showing
2 changed files
with
111 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
package cmd | ||
|
||
import ( | ||
"bytes" | ||
"fmt" | ||
"os/exec" | ||
"strings" | ||
|
||
"github.com/cupcakearmy/autorestic/internal" | ||
"github.com/cupcakearmy/autorestic/internal/colors" | ||
"github.com/cupcakearmy/autorestic/internal/lock" | ||
"github.com/spf13/cobra" | ||
) | ||
|
||
var unlockCmd = &cobra.Command{ | ||
Use: "unlock", | ||
Short: "Unlock autorestic only if you are sure that no other instance is running", | ||
Long: `Unlock autorestic only if you are sure that no other instance is running. | ||
To check you can run "ps aux | grep autorestic".`, | ||
Run: func(cmd *cobra.Command, args []string) { | ||
internal.GetConfig() | ||
|
||
force, _ := cmd.Flags().GetBool("force") | ||
|
||
if !force && isAutoresticRunning() { | ||
colors.Error.Print("Another autorestic instance is running. Are you sure you want to unlock? (yes/no): ") | ||
var response string | ||
fmt.Scanln(&response) | ||
if strings.ToLower(response) != "yes" { | ||
colors.Primary.Println("Unlocking aborted.") | ||
return | ||
} | ||
} | ||
|
||
err := lock.Unlock() | ||
if err != nil { | ||
colors.Error.Println("Could not unlock:", err) | ||
return | ||
} | ||
|
||
colors.Success.Println("Unlock successful") | ||
}, | ||
} | ||
|
||
func init() { | ||
rootCmd.AddCommand(unlockCmd) | ||
unlockCmd.Flags().Bool("force", false, "force unlock") | ||
} | ||
|
||
// isAutoresticRunning checks if autorestic is running | ||
// and returns true if it is. | ||
// It also prints the processes to stdout. | ||
func isAutoresticRunning() bool { | ||
cmd := exec.Command("sh", "-c", "ps aux | grep autorestic") | ||
var out bytes.Buffer | ||
cmd.Stdout = &out | ||
err := cmd.Run() | ||
if err != nil { | ||
return false | ||
} | ||
|
||
lines := strings.Split(out.String(), "\n") | ||
autoresticProcesses := []string{} | ||
|
||
for _, line := range lines { | ||
if strings.Contains(line, "autorestic") && !strings.Contains(line, "grep autorestic") { | ||
autoresticProcesses = append(autoresticProcesses, line) | ||
} | ||
} | ||
|
||
if len(autoresticProcesses) > 0 { | ||
colors.Faint.Println("Found autorestic processes:") | ||
for _, proc := range autoresticProcesses { | ||
colors.Faint.Println(proc) | ||
} | ||
return true | ||
} | ||
return false | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
# Unlock | ||
|
||
In case autorestic throws the error message `an instance is already running. exiting`, but there is no instance running you can unlock the lock. | ||
|
||
To verify that there is no instance running you can use `ps aux | grep autorestic`. | ||
|
||
Example with no instance running: | ||
|
||
```bash | ||
> ps aux | grep autorestic | ||
root 39260 0.0 0.0 6976 2696 pts/11 S+ 19:41 0:00 grep autorestic | ||
``` | ||
|
||
Example with an instance running: | ||
|
||
```bash | ||
> ps aux | grep autorestic | ||
root 29465 0.0 0.0 1162068 7380 pts/7 Sl+ 19:28 0:00 autorestic --ci backup -a | ||
root 39260 0.0 0.0 6976 2696 pts/11 S+ 19:41 0:00 grep autorestic | ||
``` | ||
|
||
**If an instance is running you should not unlock as it could lead to data loss!** | ||
|
||
```bash | ||
autorestic unlock | ||
``` | ||
|
||
Use the `--force` to prevent the confirmation prompt if an instance is running. | ||
|
||
```bash | ||
autorestic unlock --force | ||
``` |