crontab によって実行されたときに Bash 条件が満たされない

crontab によって実行されたときに Bash 条件が満たされない

Fluidsynth サーバーを起動し、それを Rasberry の MIDI デバイスに接続するための小さなスクリプトがあります (OS は Rasbian 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"

条件外の aconnect -o はデバッグ用です。

通常通り実行すると(./startup_fluid_synth.sh)、正常に動作します。https://pastebin.com/kU0wDu3w

私のcrontab -eには次のように書かれています:

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

ここで、Pi を再起動すると、スクリプトは起動しますが、ログには条件が満たされるはずであるのに満たされていないことが明確に示されます。https://pastebin.com/FnxMKBkF

なぜそうなるのか、何か考えはありますか?

アップデート: エラーログには以下が表示されます:

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

cron が [[ ]] コマンドを認識しない可能性はありますか?

答え1

.sh ファイルに #!/bin/bash を追加すると問題は解決しました。

#!/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"

関連情報