由crontab执行时不满足Bash条件


1

我有一个小脚本来启动fluidynth服务器,然后将它连接到我的rasberry上的midi设备(OS是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有可能以某种方式不知道[[]]命令吗?


使用完整路径aconnect(和任何其他外部命令)。
choroba

已经尝试过,当命令正常执行时,如何导致条件无法满足?
Julian

似乎fluidsynth命令还没有开始。你也可以检查脚本的错误输出吗?
choroba

如果你从第二个pastebin看第119行,你会看到fluidynth开始,我将添加错误输出并将其发布在上面。
朱利安

Answers:


0

将#!/ 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"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.