Bash-Bedingung bei Ausführung durch Crontab nicht erfüllt

Bash-Bedingung bei Ausführung durch Crontab nicht erfüllt

Ich habe ein kleines Skript, um einen Fluidsynth-Server zu starten und ihn dann mit meinem MIDI-Gerät auf meinem Raspberry zu verbinden (Betriebssystem ist Raspbian Stretch Lite).

echo  "Starting"
fluidsynth -is -a alsa --gain 3 /usr/share/sounds/sf2/Nice-Keys-B-Plus-JN1.4.sf2 &
echo "Fluidsynth started"
while true; do aconnect -o; if [[ $(aconnect -o ) = *FLUID* ]]; then break; fi; sleep 2; done
aconnect 20:0 128:0
echo "Connected"

Das aconnect -o außerhalb der Bedingung dient der Fehlerbehebung.

Bei normaler Ausführung (./startup_fluid_synth.sh) funktioniert es einwandfrei:https://pastebin.com/kU0wDu3w

Mein crontab -e sagt:

@reboot /home/pi/startup_fluid_synth.sh >> /home/pi/fluid.log

Wenn ich den Pi jetzt neu starte, werden die Skripte gestartet, aber das Protokoll zeigt deutlich, dass die Bedingung erfüllt sein sollte, es aber nicht ist:https://pastebin.com/FnxMKBkF

Irgendeine Idee, warum das so sein könnte?

Aktualisieren: Das Fehlerprotokoll zeigt:

/home/pi/startup_fluid_synth.sh: 4: /home/pi/startup_fluid_synth.sh: [[: not found

Ist es möglich, dass cron den Befehl [[ ]] irgendwie nicht kennt?

Antwort1

Das Hinzufügen von #!/bin/bash zur .sh-Datei hat das Problem gelöst.

#!/bin/bash
echo  "Starting"
/usr/bin/fluidsynth -is -a alsa --gain 3 /usr/share/sounds/sf2/Nice-Keys-B-Plus-JN1.4.sf2 &
echo "Fluidsynth started"
while true; do /usr/bin/aconnect -o; if [[ $(/usr/bin/aconnect -o ) = *FLUID* ]]; then break; fi; sleep 2; done
/usr/bin/aconnect 20:0 128:0
echo "Connected"

verwandte Informationen