This Issue
When using Veeam if you use Pre/Post freeze scripts for application aware processing, these scripts must reside on the VBR server, which uploads to the virtual machine you are protecting.
I hit an issue when running a job that I received the error;
Error: Script finished execution with unexpected exit code: 126
The Cause
I reviewed the task logs on the VBR server;
- C:\ProgramData\Veeam\Backup\{Job_Name}\task_{VMName}.txt
You are looking for the sections [ScriptInvoker] for troubleshooting. And I found that my script was uploaded successfully, however when it was ran the Guest OS was throwing an error;
[ScriptInvoker] Failed to execute script in lin guest machine over SSH. Script path: C:\Backup\Scripts\stop-vra.sh. bash: /tmp/d6791b89-e0b8-4cce-acec-45d682ce1f2c_stop-vra.sh: /bin/bash^M: bad interpreter: No such file or directory
I also connected to the linux machine and ran “journalctl -xe -f” whilst running the backup job and seen the same error flash up too.
The script indicates that it must be executed by a shell located at/bin/bash^M
. There is no such file: it's called/bin/bash
. The^M
is a carriage return character. Linux uses the line feed character to mark the end of a line, whereas Windows uses the two-character sequence CR LF. Your file has Windows line endings, which is confusing Linux. (Source)
You can see the full part of the task logs relating to this below.
[ScriptInvoker] Scripting mode is FailJobOnError. [ScriptInvoker] Script enabled [ScriptInvoker] Creating Linux invoker. [ScriptInvoker] Starting pre-freeze script execution [ScriptInvoker] Running Linux script (SSH) 'C:\Backup\Scripts\stop-vra.sh' [Ssh] SSH connection ae2f5df0-1d28-4dfc-a8a5-7ceb952af2a9 to server 192.168.200.39 created successfully ... [ScriptInvoker] SSH connection is established (192.168.200.39). [ScriptInvoker] Exception thrown during script execution (SSH). [Ssh] Connection ae2f5df0-1d28-4dfc-a8a5-7ceb952af2a9 - [host: '192.168.200.39', port: 22, elevation to root: 'no', autoSudo: no, use su if sudo fails: no, host name: sc-dc1-vra001.simon.local, IPs: [192.168.200.39], AuthenticationData: [UserName: root, AuthTypes: [KeyboardInteractive, Password]]] is disposing. [ScriptInvoker] Failed to execute script in lin guest machine over SSH. Script path: C:\Backup\Scripts\stop-vra.sh. bash: /tmp/d6791b89-e0b8-4cce-acec-45d682ce1f2c_stop-vra.sh: /bin/bash^M: bad interpreter: No such file or directory (System.Exception) at Veeam.Backup.SSH.CSshCommandResult.GetAnswer(Boolean trimAnswer, String failText, Boolean checkStdErr) at Veeam.Backup.Core.CSshScriptInvoker.RunScript(CSshScriptFile scriptFile, TimeSpan timeout, Boolean collectLogs, String stdOutFilePath, String stdErrFilePath, Boolean checkStdErr, Int32& exitCode) at Veeam.Backup.Core.CSshScriptInvoker.ExecScriptInner(String localPath, TimeSpan timeout, Boolean collectLogs, String stdOutFilePath, String stdErrFilePath, Boolean checkStdErr, Int32& exitCode) [ScriptInvoker] Failed to execute script over SSH, failing over to VIX. bash: /tmp/d6791b89-e0b8-4cce-acec-45d682ce1f2c_stop-vra.sh: /bin/bash^M: bad interpreter: No such file or directory ... [ScriptInvoker] Running Linux script (VIX) 'C:\Backup\Scripts\stop-vra.sh' [ScriptInvoker] Linux script exit code = '126'
The Fix
The fix is quite easy, either change your text editor to show the correct line endings.
Or create the script on a Linux machine and copy it to your VBR Server.
To fix this issue in your text editor
Notepad++ Edit --> EOL Conversion --> UNIX/OSX Format Eclipse File > Convert Line Delimiters To > Unix (LF, \n, 0Α, ¶) Or change the New text file line delimiter to Other: Unix on Window > Preferences > General > Workspace Sublime Text Editor View > Line Endings > Unix Atom See this guide. (Source)
Regards