Shell Script mit shell_command und Fehler 127

Hallo zusammen,

ich bin neu hier und habe mich extra angemeldet, da ich mich in HA einarbeite und ein Problem habe.
Installiert habe ich HA in einer VM auf Proxmox 8.2.7 auf einem Intel Nuc i3.
Der Softwarestand von HA ist aktuell:
Core 2024.11.1
Supervisor 2024.11.3
Operating System 13.2
Frontend 20241106.2

Jetzt zu meinem Problem. Ich habe div. Netzlaufwerke von meinem Windows Server verbunden und kann auch darauf zugreifen.
In HA habe ich das tägliche Backup eingerichtet, was auch soweit funktioniert. Die Backups lasse ich im lokalen Datenspeicher ablegen.
Über ein Script möchte ich das Backup auch noch auf mein Netzlaufwerk zusätzlich kopieren.
Dazu habe ich im Internet recheriert und gelesen das man eine weitere Automation anlegen soll, bei der das Script ausgeführt wird.

Momentan sieht die configuration.yaml so aus:

#New line to configuration.yaml to include linux shell scripts
shell_command: !include shell_commands.yaml

Dann die shell_commands.yaml so:

shell_command:
  shell_copy_backup: /bin/bash /homeassistant/copy_homeassistant.sh

Und die automations.yaml:

- id: '1731417107890'
  alias: Automatisches Backup
  description: Automatisches Backup
  triggers:
  - trigger: time
    at: 02:00:00
  conditions:
  - condition: time
    weekday:
    - mon
    - tue
    - wed
    - thu
    - fri
    - sat
    - sun
  actions:
  - action: hassio.backup_full
    metadata: {}
    data:
      compressed: true
      homeassistant_exclude_database: false
  mode: single
- id: '1731583606873'
  alias: Kopieren Backup
  description: Kopieren Backup
  triggers:
  - trigger: time
    at: 02:15:00
  conditions:
  - condition: time
    weekday:
    - mon
    - tue
    - wed
    - thu
    - fri
    - sat
    - sun
  actions:
    - action: shell_command.shell_copy_backup
  mode: single

Allerdings bekomme ich immer einen Fehler im Log:

2024-11-19 02:15:00.245 ERROR (MainThread) [homeassistant.components.shell_command] Error running command: `/bin/bash /homeassistant/copy_homeassistant.sh`, return code: 127
NoneType: None

Das Script copy_homeassistant.sh sieht so aus:

#!/bin/bash

/bin/cp -u -n -p /backup/*.tar /media/Raspibackup/HomeAssistant/
/usr/bin/find /backup/*.tar -mtime +30 -exec rm {} \;
/usr/bin/find /media/Raspibackup/HomeAssistant/*.tar -mtime +30 -exec rm {} \;

Die Berechtigungen habe ich auch entsprechend gesetzt.
Starte ich das Script von Hand über die Konsole läuft es durch und kopiert die Backups auf das Netzlaufwerk.

Hat jemand eine Idee zu dem Fehler 127?? Bzw. hat jemand erfolgreich ein Shell-Script in HA eingebunden?
Ich habe mich schon dumm und dämlich gesucht im Internet und div. Sachen getestet, nur ich kriege den Fehler nicht weg.
Egal ob ich in der shell_commands.yaml wie im Internet nachzulesen, mal mit /bin/bash oder nur bash oder ohne, oder mit “”, ‘’ oder ohne um den Befehl, es läuft nicht.
Auch bei unterschiedlichen Versuchen mit der Pfad Angabe /config/… oder /homeassistant/… usw, es läuft nicht und zum Teil krieg ich nicht mal einen Fehler im Log zurück.

Daher nochmal die Frage, hat jemand sowas in der Konstellation erfolgreich am laufen?
Wäre schön wenn jemand weiter helfen könnte.

LG,
Slice

… etliche

Frage 1: ist die Syntax in der shell_commands.yaml richtig? Ich nutze kein include sondern direkt. Bei Sensoren darfst du im include das Schlüsselwort sensor im include nicht wiederholen da es ja schon in der config mit dem Hinweis auf !include angegeben wurde
Frage 2: Hast du die Automation in der Oberfläche, über das Menü angelegt oder im Texteditor? Da sollte eigentlcih auch ein “enable” und auch ein “data” Eintrag mit angelegt werden
Frage 3: Wird dein Script aktuell in der Gui in den Entwicklerwerkzeugen angezeigt? Teste dann damit und zeige die Fehlermeldung

Fehler 127 bedeutet idR dass er das Script nicht findet, Rechte falsch sind. Muss aber nicht, ist ein generischer Fehler der auch bei Fehler in der yaml vorkommen können. Teste darum erst in den Entwicklungswerkzeugen.

Hi,
zu 1) ich denke das die Syntax soweit richtig ist. Zumindest konnte ich im Internet dazu nichts anderes finden.
zu 2) ja, ich habe die Automation über die Oberfläche als Szene erstellt.
zu 3) das Script wird mir in den Entwicklerwerkzeugen angezeigt und auch dort bekomme ich einen Fehler.

In der Zwischenzeit bin ich ein Stück weiter gekommen, so wie es aussieht läuft das Script wohl im Kontext von HA-Core.
Und da gibt es keinen Zugriff auf den Order “backup”. Die einzelnen Container scheinen ziemlich voneinander abgeschottet zu sein.

dann bist du nahe am Ziel. Wenn es nur um das mounten geht fehlen die entsprechenden mount parameter, ggf. in Verbindung mit SUDO- oder Userrechten.

@mostie: Das darfst Du mir gerne näher erklären wie Du das meinst. Zumal sudo auf HA nicht existiert…
Egal wie, ich versuche die nächsten Tage nun einen anderen Weg und werde es mit SSH testen. Zur Not von meinem Windows Server aus…

Ich kenn dein Setup nicht. Je nachdem wie du HA betreibst ist nicht alles möglich. Input für Output, alles andere ist Kaffeesatzlesen. Kannst du das benötigte Verzeichnis in dein HA config-Verzeichnis mounten …

Optionen? Abhängig davon warum HA das Verzeichnis nicht sieht: Mount mit UID/GID, chmod, statt mount (s)FTP, rsync, rclone, …

ggf. = gegegenerfalls = möglicherweise, allenfalls, unter gewissen Umständen

Moin,

hast Du in der configuration.yaml eingetragen, dass das Verzeichnis backup und/oder config öffentlich ist?
Beispiel:

homeassistant:
  allowlist_external_dirs:
    - /backup/

VG
Bernd

Zu mostie nochmal, mein Setup ist im ersten Beitrag aufgeführt. Leider bringen mich Deine Hinweise nicht weiter bzw. ich verstehe es nicht…

@dp20eic: Das klingt interessant! Ich habe gerade danach im Internet gesucht, aber irgendwie krieg ich das nicht erfolgreich in meine configuration.yaml eingebaut.
Hast Du mir da ein Beispiel wie das bei Dir aussieht?

Ok, ich sehe nicht wie du rumgemountet oder eingerichtet hast. Aber sicher findet sich jemand anderes der deine Informationen versteht und dir helfen wird.

Ich habe die Netzlaufwerke ganz normal über die Oberfläche verbunden, zum Beispiel:

Der Zugriff geht ja auch.
Sorry falls ich mich hier dumm anstelle, aber HA ist echt neu für mich.

Darum ging es, es gibt kein “normal”.

Du schreibst, es läuft in VM auf Proxmox. Das kann HAOS, als VM mit Debian und da drauf HA oder Docker sein. Weiter kannst du die Mounts durchreichen, per Script und mount-Befehl, Addons, Integration, …, machen.

Der Mount selbst heißt Raspi* ist aber eigentlich ein WinSrv.

In deinem Screen gibt es auch Verwendung “Backup”. Wenn du das auswählst würde das Backup direkt auf das Share geschrieben ohne irgend welche Scripte. Hast du dich bewusst dagegen entschieden?`Z. b. Mount nicht permanent vorhanden?

Meinst du den Wizzard zu dem Fenster? Der prüft vermutlich nur Zugangsdaten aber nicht ob (Schreib)-Rechte passen. Hast du irgendwelche ACL drauf, kannst du auf dem Server mal “Alle” und “Vollzugriff” geben? Erstmal schreiben können, Rechte können später beschnitten werdne.

Hast du den Editor aktiviert? Lege mal auf dem WinSrv eine Datei in das Verzeichnis und teste im HA-Editor ob du die Datei siehst, und editieren kannst. Damit bist du mit dem normalen HA User auf dem Filesystem und musst (erstmal) nicht mit SSH und console rum machen.

Edit:

Meinst du mit welchem Editor, oder Doku selbst zu den Parametern?

Home Assistant Core Integration - Home Assistant/#allowlist_external_dirs

Configuration.yaml - Home Assistant/#to-set-up-access-to-the-files-and-prepare-an-editor

Moin,

den Link zur Dokumentation hat dir ja @mostie schon gegeben, wenn Du zeigst, was du, wie in die configuration.yaml eingetragen hast, kann man da auch sicher helfen, kann eine falsche Einrückung sein, oder …
Das muss man sehen.

ich nutze das nicht, ich habe hier ein ganz anderes aufgebautes Setup, ich habe ein NAS, welches mir per NFS die Verzeichnisse backup, medien und freigegeben bereitstellt, das habe ich in HA per NFS gemountet


also landen alle Backups, wenn alles korrekt eingestellt ist, auch gleich im Backupordner auf dem NAS ich muss da nichts hin und her kopieren.

Ich würde auch nie in einem reinen UNIX Umfeld etwas mir CIFS/Samba machen, das ist ja nur nötig, wenn ein KleinWeich System im Haus ist, was hier definitiv nicht der Fall ist, es gibt hier auch kein angebissenes Obst, nur Linux, Linux, Linux und Androiden :slight_smile:

Nur aus reiner Neugierde, warum heißt bei dir das Remote Verzeichnis _RasPiBackup aber Du nutzt es für medien in HA?

Ansonsten, versuch mal die Fragen von @mostie zu beantworten, dann kommen wir da schon weiter, wäre ja gelacht, wenn man das nicht lösen kann :slight_smile:

VG
Bernd

Wow, gleich so viel Input… musste leider nebenher was arbeiten.
Ich versuche mal die Fragen und Anregungen zu beantworten.

Erstmal zu meinem Setup:

System-Informationen
Version	core-2024.11.2
Installationstyp	Home Assistant OS
Entwicklung	false
Supervisor	true
Docker	true
Benutzer	root
Virtuelle Umgebung	false
Python-Version	3.12.4
Betriebssystemfamilie	Linux
Betriebssystem-Version	6.6.54-haos
CPU-Architektur	x86_64
Zeitzone	Europe/Berlin
Konfigurationsverzeichnis	/config

Home Assistant Community Store
GitHub API	ok
GitHub Content	ok
GitHub Web	ok
HACS Data	ok
GitHub API Calls Remaining	5000
Installed Version	2.0.1
Stage	running
Available Repositories	1460
Downloaded Repositories	3
Home Assistant Cloud
Angemeldet	false
Zertifikatsserver erreichbar	ok
Authentifizierungsserver erreichbar	ok
Home Assistant Cloud erreichbar	ok

Home Assistant Supervisor
Host-Betriebssystem	Home Assistant OS 13.2
Update-Channel	stable
Supervisor-Version	supervisor-2024.11.3
Agent-Version	1.6.0
Docker-Version	27.2.0
Speicherplatz gesamt	30.8 GB
Speicherplatz genutzt	8.6 GB
Gesund	true
Unterstützt	true
host_connectivity	true
supervisor_connectivity	true
ntp_synchronized	true
virtualization	kvm
Board	ova
Supervisor-API	ok
Versions-API	ok
Installierte Add-ons	Studio Code Server (5.17.3), File editor (5.8.0), Terminal & SSH (9.15.0)
Dashboards
Dashboards	2
Ressourcen	0
Ansichten	2
Modus	storage

Die HA Installation läuft auf einem Nuc i3 in einer VM auf Proxmox.

Als Außenstehender ist es natürlich verwirrend wenn man bei mir das Netzlaufwerk mit der Bezeichung “Raspibackup” liest.
Das ist einfach mit der Zeit so gewachsen. Am Anfang habe ich nur die Homematic Sachen dort hin gesichert. In der Zwischenzeit landen da auch die InfluxDB, Grafana, ioBroker Backups drin.
Der User mit dem ich das Laufwerk in HA verbinde hat vollen Zugriff
Ich habe auch einen mount in HA mit Backup angelegt. Das funktioniert auch, wenn ich die Backups direkt in HA auf das Netzlaufwerk schreiben lasse.
Aber ich möchte halt gerne die Backups lokal in HA ablegen lassen und zusätzlich auf das Netzlaufwerk “Raspibackup” kopieren.
Doppelte Bevorratung der Backups ist der Hintergrund.

Wenn ich in der HA Oberfläche auf Terminal gehe und mein “copy_homeassistant.sh” Script ausführe, wird das auch auf das Netzlaufwerk kopiert. Das schrieb ich schon zum Anfang. Daher passen auch die Zugriffsrechte auf das Server Netzlaufwerk.

Der File Editor ist bei mir installiert, muss ich mal schauen wie ich mit dem klar komme und die Anregungen von mostie ausprobieren.
SSH ist auch eingerichtet und funktioniert soweit.

Meine configration.yaml ist recht einfach bisher:

# Loads default set of integrations. Do not remove.
default_config:

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

shell_command:
  copy_backup: /bin/bash /config/copy_homeassistant.sh

Wenn ich nun wie von db20eic versuche den Teil:

homeassistant:
  allowlist_external_dirs:
    - /backup/

oben in der config einfüge, bekomme ich den Fehler:

Konfigurationsfehler
Invalid config for 'homeassistant' at configuration.yaml, line 3: Not a directory 'allowlist_external_dirs->0', got '/backup/'

wenn ich über Entwicklerwerkzeuge die Konfiguration überprüfen lasse.
Daher war die Frage wie dieser Part in der configuration.yaml eingetragen werden muss?

In “medien” habe ich noch ein paar andere Netzlaufwerke verbunden, aber das sollte hier ja kein Thema sein.

Ich stehe ja noch ganz am Anfang meiner HA Installation und das erste was ich einrichten wollte, ist diese Backup Sache.
Gerne versuche hier noch weitere Dinge nebenher aus. Muss halt nur ab und zu auch was arbeiten…

LG,
Slice

Moin,

hat jetzt nichts mit dem aktuellen Thema zu tun, aber Du hast dann etwas von Proxmox noch nicht verstanden :wink:

Du solltest Dir ein Backupplan machen und die VM in Proxmox sichern, ich habe z. B. überhaupt keine Sicherung in HA als Backup, sondern nur das Backup aus Proxmox heraus, und Snapshots, der VM, sollte mal etwas passieren, kann ich entweder das aus den Snapshots oder vom letzten Proxmoxbackup alles in weniger als einer Minute wieder herstellen.
Ein Backupkonzept könnte dann so aussehen
3-2-1 Backup-Strategie

Zur configuration.yaml kann ich immer noch nichts sagen, weil Du sie nicht in dem Zustand zeigst, wenn sie den Fehler wirft!

VG
Bernd

Okay, ja ich sichere auch die VM’s in Proxmox einmal in der Woche.
Das ist noch eine zusätzliche Sicherung. Lieber ein Backup mehr haben.

So sieht die configuration.yaml aus:

homeassistant:
  allowlist_external_dirs:
    - /backup/

# Loads default set of integrations. Do not remove.
default_config:

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

shell_command:
  copy_backup: /bin/bash /config/copy_homeassistant.sh

und es kommt der Fehler:

Konfigurationsfehler
Invalid config for 'homeassistant' at configuration.yaml, line 3: Not a directory 'allowlist_external_dirs->0', got '/backup/'

Moin,

Dann versuche es mal so, wie es auch in der Dokumentation steht :wink:

homeassistant:
  allowlist_external_dirs:
    - "/backup"

Bild aus der Dokumentation:

VG
Bernd

P.S.: nur das mit den Pfeilen, der Rest ist uninteressant :wink:

Die Fehlermeldung erscheint, wenn es das Verzeichnis nicht gibt, also in deinem Fall /backup

Auch nach Doku:

homeassistant:
  allowlist_external_dirs:
    - "/backup"

kommt der Fehler immer noch.
Wenn ich es zum testen auf “/tmp” ändere, dann kommt kein Fehler.
Es ist echt wie verhext…

EDIT:
Vielleicht doch einfach den anderen Weg versuchen und per Powershell Script über SSH die Backups auf den Server laden!!

Stoße mal ein Backup über die Gui an und poste den Screenshot vom Backup screen. Da siehst du wohin das Backup geschrieben wurde. Den Ordner muss es ja geben sonst wärde der Backup Befehl scheitern. Bei mir heißt der Ordner backups - mit s. Habe das nie geändert.

Syntax bei mir deshalb mit /config

homeassistant:
#  name: Home

  allowlist_external_dirs:
    - "/config"
    - "/tmp"
  debug: false
  auth_providers:
    - type: trusted_networks
      trusted_networks:
        - 192.168.0.0/24
        - 192.168.1.2      
      allow_bypass_login: true
    - type: homeassistant

21-11-2024_14-03-35

Moin,

das Verzeichnis ist schon da, aber anscheinend darf man das nicht einfach als external_dir nutzen.

➜  ~ pwd
/root
➜  ~ ls -la 
total 172
drwxr-xr-x    1 root     root          4096 Nov 21 14:18 .
drwxr-xr-x    1 root     root          4096 Nov 19 05:16 ..
..
lrwxrwxrwx    1 root     root             7 Nov 19 05:16 backup -> /backup
lrwxrwxrwx    1 root     root            14 Nov 19 05:16 config -> /homeassistant
..

VG
Bernd