在启动时保持bash脚本在后台循环的最佳方法是什么 – Linux?

我创建了一个bash脚本,通过声卡的/ mic端口记录声音输入,当通过打破静音检测到声音时,它会记录到临时文件,然后在新文件中标记日期并将其添加到数据库.

我需要实现的是一个让脚本在启动时启动的好方法,一遍又一遍地运行脚本,如果它无法自行重启则重启.下面是我目前从各种来源汇总的代码,到目前为止它运作良好.但我需要它能够在没有任何用户交互的情况下全天候运行.

这是我创建的第一个真正的bash脚本,所以我希望对我使用的方法有一个更有经验的输入,如果它是错误的或正确的.

我确实尝试通过start-stop-daemon守护进程,但最终得到了多个运行脚本和sox命令.目前我有它在rc.local启动时执行,我个人认为这是通过在脚本底部再次添加命令来重启脚本的正确方法…但我不知道任何其他方式.

非常感谢任何形式的帮助.

#!/bin/bash

#Remove temp file just incase
rm -rf temp.mp3

#Listen for audio and record
sox -d /home/user/temp.mp3 silence 1 5 8% 1 0:00:01 8%

#Check if temp.mp3 is greater than 800 bytes so we don't get blank recordings added to the
#database, if the file is below 800 bytes remove the file and restart.
for i in /home/user/temp.mp3 ; do
   b=`stat -c %s "$i"`
if [ $b -ge 800 ] ; then

NAME=`date +%Y-%m-%d_%H-%M-%S`
TIME=`date +%H:%M:%S`
FILENAME=/var/www/Recordings/$NAME.mp3
FILEWWW=Recordings/$NAME.mp3
mv /home/user/temp.mp3 $FILENAME
rm -rf temp.mp3

mysql --host=localhost --user=root --password=pass database << EOF
insert into recordings (id,time,filename,active,status) values('NULL','$TIME','$FILEWWW','1','1');
EOF


else
rm -rf /home/user/temp.mp3
echo 'No sound detected, Restarting...'
fi
done

/home/user/vox
exit 0

最佳答案 要重新启动脚本,可以通过crontab
Crontab Howto调用它

点赞