creativeprojects / resticprofile

Configuration profiles manager and scheduler for restic backup
https://creativeprojects.github.io/resticprofile/
GNU General Public License v3.0
712 stars 33 forks source link

Forward restic exit code from resticprofile #410

Open arberg opened 1 week ago

arberg commented 1 week ago

Please, pretty please, forward restic exit code from resticprofile.

I would like to be able to do automation based on exit code from restic. If restic is never called, of cause do as you decide. But if restic is invoked I can do error-handling based on the actual code, possibly choosing between different retry strategies.

Tested on 0.28.1.

PS C:\ToolsAdmin\Restic> .\resticprofile.exe bnrgit-frequent-to-tower-ssd.forget
2024/10/05 22:20:56 using configuration file: profiles.yaml
2024/10/05 22:20:56 assuming restic is at latest known version ; exec: "restic.exe": cannot run executable found relative to current directory
2024/10/05 22:20:56 Failed parsing profile section "tag": '' expected a map, got 'slice'
2024/10/05 22:20:56 profile 'bnrgit-frequent-to-tower-ssd': starting 'forget'
repository 3ed62ea6 opened (version 2, compression level max)
repo already locked, waiting up to 0s for the lock
unable to create lock in backend: repository is already locked by PID 17900 on Muaddib by MUADDIB\Administrator (UID 0, GID 0)
lock was created at 2024-10-05 22:20:45 (10.7065338s ago)
storage ID 1303b763
the `unlock` command can be used to remove stale locks
2024/10/05 22:20:56 forget on profile 'bnrgit-frequent-to-tower-ssd': exit status 11
PS C:\ToolsAdmin\Restic> $LASTEXITCODE
1
PS C:\ToolsAdmin\Restic> .\restic.exe forget
repository 3ed62ea6 opened (version 2, compression level auto)
repo already locked, waiting up to 0s for the lock
unable to create lock in backend: repository is already locked by PID 17900 on Muaddib by MUADDIB\Administrator (UID 0, GID 0)
lock was created at 2024-10-05 22:20:45 (16.7413853s ago)
storage ID 1303b763
the `unlock` command can be used to remove stale locks
PS C:\ToolsAdmin\Restic> $LASTEXITCODE
11
PS C:\ToolsAdmin\Restic>
arberg commented 1 week ago

Also if you happen to know why I get this line, i would appreciate it. I guess its something with my setup. restic.exe is in the current dir, its not on the path, so it should be executed as ./restic.exe.

Possibly its a bug i resticprofile if it use different restic invocation for checking version than for actually executing the task.

2024/10/05 22:20:56 assuming restic is at latest known version ; exec: "restic.exe": cannot run executable found relative to current directory
creativeprojects commented 1 week ago

Please, pretty please, forward restic exit code from resticprofile.

I would like to be able to do automation based on exit code from restic. If restic is never called, of cause do as you decide. But if restic is invoked I can do error-handling based on the actual code, possibly choosing between different retry strategies.

restic returning different error codes is a new feature actually, resticprofile hasn't caught up yet. I was planning on returning restic codes 👍🏻

About your example using locks, resticprofile can already try to unlock the repository automatically for you, documentation here: https://creativeprojects.github.io/resticprofile/usage/locks/index.html

creativeprojects commented 1 week ago
2024/10/05 22:20:56 assuming restic is at latest known version ; exec: "restic.exe": cannot run executable found relative to current directory

I haven't seen this error before, although I'm no longer using a Windows machine. Does the restic.exe have some weird permissions?

You can try to specify the location of the restic.exe in the global section if that helps

danielfdickinson commented 1 week ago

In a PowerShell console, at least, Windows does not execute from the current working directory unless explicitly told to do so with .\some-command.exe.

Windows Terminal defaults to PowerShell unless you have overridden that, and on Windows 11 the right-click on the Start Menu popup defaults to using Windows Terminal.

This may be your issue.

arberg commented 1 week ago

Thank you both.

Cool to hear its a new restic feature, no wonder you were not forwarding the exit code yet.

Fred, regarding locks thank you, I know about it and appreciate that feature greatly. But thank you for the heads up. In this case the other program was running and I was considering adding some error-code handling to my scripts.

Btw. I've created powershell wrappers around restic-profile. The powershell scripts are crossplatform so can be used for both windows and linux, and I use it for both, though mostly I think its useful for the task-handling of the windows backups. Hopefully I'll publish it soon.

Thank you Daniel, it helped setting the path env, or setting the mentioned restic-binary to full path, that made the warning go away. Indeed in my case, restic was not on the path and I'm using powershell and therefore one had to run ./restic. But it worked for backup, as in resticprofile could find restic and launch the backup, so I was confused about the waning/error.

You can close this, if you don't think there's anything else to add or consider about the warning.