crontab 执行时 Bash 条件不满足

crontab 执行时 Bash 条件不满足

我有一个小脚本来启动 fluidsynth 服务器,然后将其连接到我的 rasberry 上的 midi 设备(操作系统是 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"

条件外面的 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

将 #!/bin/bash 添加到 .sh 文件可解决问题。

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

相关内容