# Hooks If you want to perform some commands before and/or after a backup, you can use hooks. They consist of a list of commands that will be executed in the same directory as the target `from`. The following hooks groups are supported, none are required: - `prevalidate` - `before` - `after` - `failure` - `success` The difference between `prevalidate` and `before` hooks are that `prevalidate` is run before checking the backup location is valid, including checking that the `from` directories exist. This can be useful, for example, to mount the source filesystem that contains the directories listed in `from`. ```yml | .autorestic.yml locations: my-location: from: /data to: my-backend hooks: prevalidate: - echo "Checks" before: - echo "One" - echo "Two" - echo "Three" after: - echo "Bye" failure: - echo "Something went wrong" success: - echo "Well done!" ``` ## Flowchart 1. `prevalidate` hook 2. Check backup location 3. `before` hook 4. Run backup 5. `after` hook 6. - `success` hook if no errors were found - `failure` hook if at least one error was encountered If either the `prevalidate` or `before` hook encounters errors then the backup and `after` hooks will be skipped and only the `failed` hooks will run. ## Environment variables All hooks are exposed to the `AUTORESTIC_LOCATION` environment variable, which contains the location name. The `after` and `success` hooks have access to additional information with the following syntax: ```bash AUTORESTIC_[TYPE]_[I] AUTORESTIC_[TYPE]_[BACKEND_NAME] ``` Every type of metadata is appended with both the name of the backend associated with and the number in which the backends where executed. ### Available Metadata Types - `SNAPSHOT_ID` - `PARENT_SNAPSHOT_ID` - `FILES_ADDED` - `FILES_CHANGED` - `FILES_UNMODIFIED` - `DIRS_ADDED` - `DIRS_CHANGED` - `DIRS_UNMODIFIED` - `ADDED_SIZE` - `PROCESSED_FILES` - `PROCESSED_SIZE` - `PROCESSED_DURATION` #### Example Assuming you have a location `bar` that backs up to a single backend named `foo` you could expect the following env variables: ```bash AUTORESTIC_LOCATION=bar AUTORESTIC_FILES_ADDED_0=42 AUTORESTIC_FILES_ADDED_FOO=42 ```